私の問題を説明するために、私は文脈を伝えなければなりません。ボットへのMicrosoft DirectLine APIは動作しません
私は、Microsoftのボットフレームワークをスラックに配備したBotを手に入れました。今では、ボットが通信するバックエンドのこれらの "イベント"が発生する可能性があります。イベントが発生すると、そのボットにボットに通知し、何か起こっていることを会話のすべてに伝えるようにします。だから基本的に:
Backend>Microserivce>Bot>users
これを行うには、私はそこにデータベース内で行うバックエンドにすべての会話を保存する必要があります。イベントが発生すると、バックエンドはボットにすべての会話(基本的に自分のID)とそのイベントを表示するように活動を通知します。
本質的に私のバックエンドはボットにメッセージを投稿する必要があります。
これを行うために、私はここで仲介人として働くマイクロソフトのdirectline apiを見つけました。これはもっと抽象的な方法でボットと話すことです。問題は私がそれをやる方法を知らないことです。私はマイクロソフト自身のチュートリアルに従ったが、それは私にとってはうまくいかないようだ。
これは私のバックエンドがボットに通知するのに使うエンドポイントである。 "content"にはjson形式の文字列としての会話とイベントが含まれています。
[HttpPost]
[Route("conversationsEvents")]
public HttpResponseMessage PostConversationsEvents([FromBody]string content)
{
NotifyBot.Notify(content);
return Request.CreateResponse(HttpStatusCode.NoContent);
}
NotifyBot.Notify(コンテンツ)は次のようになります。
private static async Task StartBotConversation(string contents)
{
string directLineSecret = "secret";
string fromUser = "microserviceNotifyEndpoint";
Activity activity = new Activity
{
From = new ChannelAccount(fromUser),
Text = contents,
Type = ActivityTypes.Event
};
DirectLineClient client = new DirectLineClient(directLineSecret);
var conversation = await client.Conversations.StartConversationAsync();
await client.Conversations.PostActivityAsync(conversation.ConversationId, activity);
}
Basicly実行取得のスタックvar conversation = await client.Conversations.StartConversationAsync();
で、それだけで永遠に待ちます。 私はそれをvar conversation = await client.Conversations.StartConversationAsync().ConfigureAwait(continueOnCapturedContext: false);
に変更しようとしましたが、実行は続きますが、アクティビティは投稿されていないようです。
私はダイレクトラインAPIを使用すると良い練習だと思った。私は呼ぶことができるボットの内部に「通常の」エンドポイントを定義しようと試みただけですが、同じ結果が得られます。私はあなたの事例を調べます。 – lallaliff