call: recordResponse
[アーティクル]
04/06/2022
3 人の共同作成者
この記事の内容
名前空間: microsoft.graph
重要
Microsoft Graph のバージョンの /beta API は変更される可能性があります。 実稼働アプリケーションでこれらの API を使用することは、サポートされていません。 API が v1.0 で使用できるかどうかを確認するには、 バージョン セレクターを使用します。
発信者からの短い音声応答を録音します。
ボットはこれを使用して、応答を求めるメッセージが表示された後、発信者からの音声応答をキャプチャできます。
操作を処理する方法の詳細については、「 commsOperation」を参照してください。
注: この API は、serviceHostedMediaConfig で開始される呼び出しでのみサポートされます。
このアクションは、通話全体を記録することを意図した操作ではありません。 記録の最大長は 2 分です。 記録はクラウド コミュニケーション プラットフォームによって永続的に保存されるのではなく、通話が終了した直後に破棄されます。 ボットは、完了した通知で指定された recordingLocation 値を使用して、記録操作が完了した後、すぐに記録をダウンロードする必要があります。
注: アプリケーションがアクセスする呼び出しや会議、またはそのメディア コンテンツから派生したデータからメディア コンテンツを記録したり、保持したりしてみることができます。 データ保護と通信の機密性に関して、お客様が地域の法令に準拠している必要があります。 詳細については、利用規約 を確認して、法律顧問にご相談ください。
アクセス許可
この API を呼び出すには、次のいずれかのアクセス許可が必要です。アクセス許可の選択方法などの詳細については、「アクセス許可 」を参照してください。
アクセス許可の種類
アクセス許可 (特権の小さいものから大きいものへ)
委任 (職場または学校のアカウント)
サポート対象外
委任 (個人用 Microsoft アカウント)
サポート対象外
アプリケーション
Calls.AccessMedia.All
HTTP 要求
POST /app/calls/{id}/recordResponse
POST /communications/calls/{id}/recordResponse
注: /app パスは廃止されます。 今後は、/communications パスを使用してください。
名前
説明
Authorization
ベアラー {token}。必須。
Content-type
application/json. Required.
要求本文
要求本文で、次のパラメーターを含む JSON オブジェクトを指定します。
パラメーター
型
説明
プロンプト
MediaPrompt コレクション
再生するプロンプト。 サポートされる mediaPrompt コレクションの最大サイズは 1 です。
bargeInAllowed
Boolean
true の場合、recordResponse 要求は他の既存のキューアップ/現在処理中のレコード/playprompt 要求に入れられます。 既定値 = false。
initialSilenceTimeoutInSeconds
Int32
タイムアウトして操作に失敗する前に、レコード応答操作を開始してから許可される最大初期無音 (ユーザーの無音)。 プロンプトを再生している場合、このタイマーはプロンプトの終了後に開始されます。 既定値 = 5 秒、最小 = 1 秒、最大 = 120 秒
maxSilenceTimeoutInSeconds
Int32
ユーザーが話し始めた後に許可される最大無音 (一時停止) 時間。 既定値 = 5 秒、最小 = 1 秒、最大 = 120 秒。
maxRecordDurationInSeconds
Int32
記録を停止する前の recordResponse 操作の最大期間。 既定値 = 5 秒、最小 = 1 秒、最大 = 120 秒。
playBeep
Boolean
true の場合は、メッセージの録音を開始できるユーザーに対してビープ音を再生します。 Default = true。
stopTones
String collection
録音を終了するために指定されたトーンを停止します。
clientContext
String
一意のクライアント コンテキスト文字列。 最大制限は 256 文字です。
注: 最大記録時間が 5 分から 2 分に短縮されました。
応答
このメソッドは、HTTP 応答コード 200 OK と URI を含む Location ヘッダーを、この要求用に作成された recordOperation に返します。
例
次の例は、この API を呼び出す方法を示しています。
例 1: 発信者からの短い音声応答を記録する
要求
次の例は要求を示しています。
POST https://graph.microsoft.com/beta/communications/calls/{id}/recordResponse
Content-Type: application/json
Content-Length: 394
{
"bargeInAllowed": true,
"clientContext": "d45324c1-fcb5-430a-902c-f20af696537c",
"prompts": [
{
"@odata.type": "#microsoft.graph.mediaPrompt",
"mediaInfo": {
"uri": "https://cdn.contoso.com/beep.wav",
"resourceId": "1D6DE2D4-CD51-4309-8DAA-70768651088E"
}
}
],
"maxRecordDurationInSeconds": 10,
"initialSilenceTimeoutInSeconds": 5,
"maxSilenceTimeoutInSeconds": 2,
"playBeep": true,
"stopTones": [ "#", "1", "*" ]
}
const options = {
authProvider,
};
const client = Client.init(options);
const recordOperation = {
bargeInAllowed: true,
clientContext: 'd45324c1-fcb5-430a-902c-f20af696537c',
prompts: [
{
'@odata.type': '#microsoft.graph.mediaPrompt',
mediaInfo: {
uri: 'https://cdn.contoso.com/beep.wav',
resourceId: '1D6DE2D4-CD51-4309-8DAA-70768651088E'
}
}
],
maxRecordDurationInSeconds: 10,
initialSilenceTimeoutInSeconds: 5,
maxSilenceTimeoutInSeconds: 2,
playBeep: true,
stopTones: [ '#', '1', '*' ]
};
await client.api('/communications/calls/{id}/recordResponse')
.version('beta')
.post(recordOperation);
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var bargeInAllowed = true;
var clientContext = "d45324c1-fcb5-430a-902c-f20af696537c";
var prompts = new List<Prompt>()
{
new MediaPrompt
{
MediaInfo = new MediaInfo
{
Uri = "https://cdn.contoso.com/beep.wav",
ResourceId = "1D6DE2D4-CD51-4309-8DAA-70768651088E"
}
}
};
var maxRecordDurationInSeconds = 10;
var initialSilenceTimeoutInSeconds = 5;
var maxSilenceTimeoutInSeconds = 2;
var playBeep = true;
var stopTones = new List<String>()
{
"#",
"1",
"*"
};
await graphClient.Communications.Calls["{call-id}"]
.RecordResponse(prompts,bargeInAllowed,initialSilenceTimeoutInSeconds,maxSilenceTimeoutInSeconds,maxRecordDurationInSeconds,playBeep,null,stopTones,clientContext)
.Request()
.PostAsync();
MSHTTPClient *httpClient = [MSClientFactory createHTTPClientWithAuthenticationProvider:authenticationProvider];
NSString *MSGraphBaseURL = @"https://graph.microsoft.com/beta/";
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[MSGraphBaseURL stringByAppendingString:@"/communications/calls/{id}/recordResponse"]]];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSMutableDictionary *payloadDictionary = [[NSMutableDictionary alloc] init];
BOOL bargeInAllowed = YES;
payloadDictionary[@"bargeInAllowed"] = bargeInAllowed;
NSString *clientContext = @"d45324c1-fcb5-430a-902c-f20af696537c";
payloadDictionary[@"clientContext"] = clientContext;
NSMutableArray *promptsList = [[NSMutableArray alloc] init];
MSGraphPrompt *prompts = [[MSGraphPrompt alloc] init];
MSGraphMediaInfo *mediaInfo = [[MSGraphMediaInfo alloc] init];
[mediaInfo setUri:@"https://cdn.contoso.com/beep.wav"];
[mediaInfo setResourceId:@"1D6DE2D4-CD51-4309-8DAA-70768651088E"];
[prompts setMediaInfo:mediaInfo];
[promptsList addObject: prompts];
payloadDictionary[@"prompts"] = promptsList;
int32_t maxRecordDurationInSeconds = 10;
payloadDictionary[@"maxRecordDurationInSeconds"] = maxRecordDurationInSeconds;
int32_t initialSilenceTimeoutInSeconds = 5;
payloadDictionary[@"initialSilenceTimeoutInSeconds"] = initialSilenceTimeoutInSeconds;
int32_t maxSilenceTimeoutInSeconds = 2;
payloadDictionary[@"maxSilenceTimeoutInSeconds"] = maxSilenceTimeoutInSeconds;
BOOL playBeep = YES;
payloadDictionary[@"playBeep"] = playBeep;
NSMutableArray *stopTonesList = [[NSMutableArray alloc] init];
[stopTonesList addObject: @"#"];
[stopTonesList addObject: @"1"];
[stopTonesList addObject: @"*"];
payloadDictionary[@"stopTones"] = stopTonesList;
NSData *data = [NSJSONSerialization dataWithJSONObject:payloadDictionary options:kNilOptions error:&error];
[urlRequest setHTTPBody:data];
MSURLSessionDataTask *meDataTask = [httpClient dataTaskWithRequest:urlRequest
completionHandler: ^(NSData *data, NSURLResponse *response, NSError *nserror) {
//Request Completed
}];
[meDataTask execute];
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
Boolean bargeInAllowed = true;
String clientContext = "d45324c1-fcb5-430a-902c-f20af696537c";
LinkedList<Prompt> promptsList = new LinkedList<Prompt>();
MediaPrompt prompts = new MediaPrompt();
MediaInfo mediaInfo = new MediaInfo();
mediaInfo.uri = "https://cdn.contoso.com/beep.wav";
mediaInfo.resourceId = "1D6DE2D4-CD51-4309-8DAA-70768651088E";
prompts.mediaInfo = mediaInfo;
promptsList.add(prompts);
int maxRecordDurationInSeconds = 10;
int initialSilenceTimeoutInSeconds = 5;
int maxSilenceTimeoutInSeconds = 2;
Boolean playBeep = true;
LinkedList<String> stopTonesList = new LinkedList<String>();
stopTonesList.add("#");
stopTonesList.add("1");
stopTonesList.add("*");
graphClient.communications().calls("{id}")
.recordResponse(CallRecordResponseParameterSet
.newBuilder()
.withPrompts(promptsList)
.withBargeInAllowed(bargeInAllowed)
.withInitialSilenceTimeoutInSeconds(initialSilenceTimeoutInSeconds)
.withMaxSilenceTimeoutInSeconds(maxSilenceTimeoutInSeconds)
.withMaxRecordDurationInSeconds(maxRecordDurationInSeconds)
.withPlayBeep(playBeep)
.withStreamWhileRecording(null)
.withStopTones(stopTonesList)
.withClientContext(clientContext)
.build())
.buildRequest()
.post();
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestBody := msgraphsdk.New()
bargeInAllowed := true
requestBody.SetBargeInAllowed(&bargeInAllowed)
clientContext := "d45324c1-fcb5-430a-902c-f20af696537c"
requestBody.SetClientContext(&clientContext)
requestBody.SetPrompts( []Prompt {
msgraphsdk.NewPrompt(),
SetAdditionalData(map[string]interface{}{
"@odata.type": "#microsoft.graph.mediaPrompt",
}
}
maxRecordDurationInSeconds := int32(10)
requestBody.SetMaxRecordDurationInSeconds(&maxRecordDurationInSeconds)
initialSilenceTimeoutInSeconds := int32(5)
requestBody.SetInitialSilenceTimeoutInSeconds(&initialSilenceTimeoutInSeconds)
maxSilenceTimeoutInSeconds := int32(2)
requestBody.SetMaxSilenceTimeoutInSeconds(&maxSilenceTimeoutInSeconds)
playBeep := true
requestBody.SetPlayBeep(&playBeep)
requestBody.SetStopTones( []String {
"#",
"1",
"*",
}
callId := "call-id"
result, err := graphClient.Communications().CallsById(&callId).RecordResponse(call-id).Post(requestBody)
Import-Module Microsoft.Graph.CloudCommunications
$params = @{
BargeInAllowed = $true
ClientContext = "d45324c1-fcb5-430a-902c-f20af696537c"
Prompts = @(
@{
"@odata.type" = "#microsoft.graph.mediaPrompt"
}
)
MaxRecordDurationInSeconds = 10
InitialSilenceTimeoutInSeconds = 5
MaxSilenceTimeoutInSeconds = 2
PlayBeep = $true
StopTones = @(
"#"
"1"
"*"
)
}
Invoke-MgRecordCommunicationCallResponse -CallId $callId -BodyParameter $params
応答
次の例は応答を示しています。
注: ここに示す応答オブジェクトは、読みやすさのために短縮されている場合があります。
HTTP/1.1 200 OK
Location: https://graph.microsoft.com/beta/communications/calls/57dab8b1-894c-409a-b240-bd8beae78896/operations/0fe0623f-d628-42ed-b4bd-8ac290072cc5
{
"@odata.type": "#microsoft.graph.recordOperation",
"id": "0fe0623f-d628-42ed-b4bd-8ac290072cc5",
"status": "running",
"completionReason": null,
"resultInfo": null,
"recordingLocation": null,
"clientContext": "d45324c1-fcb5-430a-902c-f20af696537c"
}
通知 - 操作が完了しました
POST https://bot.contoso.com/api/calls
Content-Type: application/json
{
"@odata.type": "#microsoft.graph.commsNotifications",
"value": [
{
"@odata.type": "#microsoft.graph.commsNotification",
"changeType": "deleted",
"resourceUrl": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896/operations/0FE0623FD62842EDB4BD8AC290072CC5",
"resourceData": {
"@odata.type": "#microsoft.graph.recordOperation",
"@odata.id": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896/operations/0FE0623FD62842EDB4BD8AC290072CC5",
"@odata.etag": "W/\"54451\"",
"id": "0fe0623f-d628-42ed-b4bd-8ac290072cc5",
"clientContext": "d45324c1-fcb5-430a-902c-f20af696537c",
"status": "completed",
"recordingLocation": "https://file.location/17e3b46c-f61d-4f4d-9635-c626ef18e6ad",
"recordingAccessToken": "<access-token>",
"completionReason": "stopToneDetected"
}
}
]
}
例 2: レコーディング ファイルの取得
注: アプリケーションがアクセスする呼び出しや会議、またはそのメディア コンテンツから派生したデータからメディア コンテンツを記録したり、保持したりしない場合があります。 データ保護と通信の機密性に関して、お客様が地域の法令に準拠している必要があります。 詳細については、利用規約 を確認して、法律顧問にご相談ください。
要求
GET https://file.location/17e3b46c-f61d-4f4d-9635-c626ef18e6ad
Authorization: Bearer <recordingAccessToken>
応答
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Date: Thu, 17 Jan 2019 01:46:37 GMT
Content-Type: application/octet-stream
(application/octet-stream of size 160696 bytes)
注: アプリケーションがアクセスする呼び出しや会議、またはそのメディア コンテンツから派生したデータからメディア コンテンツを記録したり、保持したりしない場合があります。 データ保護と通信の機密性に関して、お客様が地域の法令に準拠している必要があります。 詳細については、利用規約 を確認して、法律顧問にご相談ください。