2016-11-24 9 views
1

私は、MicrosoftのボットフレームワークでFacebookのボットを開発しています。 facebookユーザーにカスタムメッセージを送信したいので、私はカスタムchannelDataアプローチを使用します。あなたはここでそれを見つけることができます: channelData Config. そしてここでは私のコードです:C#ボットフレームワークを介してテンプレートのFacebookのメッセージを送信

var reply = activity.CreateReply(); 
reply.ChannelData = new 
        { 
         attachment = (text as SendPackage).message.attachment, 
         notification_type = "NO_PUSH" 
        }; 
var result = await connector.Conversations.ReplyToActivityAsync(reply); 

私はエミュレータ上でそれをテストしたが、channelDataプロパティはなかれ空:

{ 
    "type": "message", 
    "timestamp": "2016-11-24T02:30:44.9047645Z", 
    "from": { 
    "id": "56800324", 
    "name": "Bot1" 
    }, 
    "conversation": { 
    "id": "8a684db8", 
    "name": "Conv1" 
    }, 
    "recipient": { 
    "id": "2c1c7fa3", 
    "name": "User1" 
    }, 
    "text": "", 
    "channelData": {}, 
    "replyToId": "3f223b935086422da7ed36786ab05cb9" 
} 

ReplyToActivityAsyncから返された結果があまりにもnullです。 誰にもこの問題がありますか?おかげさまで

答えて

0

私が思うように、匿名のオブジェクトではなく、Json形式でチャンネルデータを設定する必要があります。あなたはそのモデルが複雑であるオブジェクトを送信する場合、あなたはクラスモデルを作成し、JsonConvert.Serializeがシリアライズ使用することができ、また

var channelData = "{"; 
var channelData += "'notification_type' : 'NO_PUSH',"; 
var channelData += "'attachment' : '" + text + "'"; 
var channelData = "}"; 

var reply = activity.CreateReply(); 
reply.ChannelData = channelData; 
var result = await connector.Conversations.ReplyToActivityAsync(reply); 

:だから、私の提案は、次のようなチャネルデータを設定されていますオブジェクトを作成し、それをreply.ChannelDataに設定します。

また、ngrokを使用して実際の環境でボットをテストする方が良いでしょう。したがって、あなたはFacebookメッセンジャーのあなたのボットから本当のメッセージを受け取ります。

0

非常に遅い答えですが、C#でメッセージのChannelDataを設定するのと同様の問題がありました。例えば

一貫私のために働いている唯一の方法は、使用するNewtonsoft.JsonのJObject.FromObjectある

using Newtonsoft.Json.Linq; 

message.ChannelData = JObject.FromObject(new 
{ 
    notification_type = "REGULAR", 
    // all your other channel-specific stuff here... 
}); 
await context.PostAsync(message);