2017-09-11 14 views
1

私はボット内でIDialogContext.Call()を使用して単純な子ダイアログ呼び出しを行っています。ユーザーが「新しいプロジェクト」以下のコードが呼び出された場合:Microsoft Bot Framework IDlenogContext.Call()がスラックを使用していると動作しない

... 
context.Call(new NewProjectDialog(), NewProjectConfirmed); 
... 

NewProjectDialog()だけでプロジェクト名を尋ね、その後、ボットは

[Serializable] 
public class NewProjectDialog : IDialog<Project> 
{ 
    public async Task StartAsync(IDialogContext context) 
    { 
     await context.PostAsync("What is the name of the project?"); 
     context.Wait(this.MessageReceivedAsync); 
    } 

    public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result) 
    { 
     var message = await result; 
     Project p = new Project();   
     //Saving project here... 

     await context.PostAsync($"OK. Your project '{message.Text}' was created."); 
     context.Done(p); 
    } 
} 

あるNewProjectConfirmed()に戻る前に保存しますエミュレータ、SkypeまたはWebchatから呼び出されたものはすべて期待どおりに動作します。ユーザーは "new project"と入力して新しいプロジェクトを尋ねると、botが名前を尋ね、それが待ち状態になり、ユーザーが入力したプロジェクト名が新しいプロジェクトの作成を確認します。私は、ユーザーがテキストを「新しいプロジェクト」を入力して新しいプロジェクトを求める場合には、スラックから同じことを呼び出すとき

enter image description here

しかし、「新しいプロジェクトは、」NewProjectDialogに渡されます。それはプロジェクト名を尋ねますが、待たずに「新しいプロジェクト」をさらに通過させ、プロジェクトの名前として保存します。

enter image description here

そうでもない私が行方不明です何を確認してください。 iDialogContext.Wait()はSlackとは違って動作するか、Call()関数はForward()のように子ダイアログにメッセージを投稿するようです。

+0

は私だけのFacebook Messengerで同じコードをテストしているし、それがSkypeとエミュレータのように正常に動作します。私は不思議な設定問題ですか? – gabics

+0

BotBuilderのどのバージョンを使用していますか? –

+0

最新のナゲットパッケージを使用するMicrosoft.Bot.Builder v3.9.0 – gabics

答えて

1

Howdy developersのおかげで問題が見つかりました。

これは、ボットが既にチームに対して承認されている場合に起こります。その後、他の誰かが参加し、ボットを再度承認します。それが起こると、同じRTM接続を使用してチャネルに2回ポストする2つのボットが実行されているようです。

同じSlackクライアントで2つのボットがどのように得られたのか分かりません。しかし、いったん私のボットを取り外して再インストールすると、期待どおりに動作するようになりました。

同じ問題が、この他の症状を引き起こしている:Microsoft Bot Framework Bot duplicate responses in Slack

関連する問題