我正在尝试从团队中发送一个webhook,这显然是通过Custom Bot完成的。我能够创建机器人然后我可以@botname stuff
并且端点接收有效负载。
然而,机器人立即回复"抱歉,您的请求遇到了问题"。如果我指向"回拨网址"我会收到此错误到requestb.in url或者我将它指向我的端点。这导致我怀疑机器人期待端点的某些特定响应,但是没有记录。我的端点以202和一些json响应。 Requestb.in以200和#34; ok"响应。
那么,机器人是否需要特定的响应有效载荷,如果是这样,这个有效载荷是什么?
上面的链接提到Your custom bot will need to reply asynchronously to the HTTP request from Microsoft Teams. It will have 5 seconds to reply to the message before the connection is terminated.
但是没有指示如何满足此请求,除非自定义机器人需要同步回复。
答案 0 :(得分:2)
您需要使用键' text'返回JSON响应。和'键入'如示例here中所示
{
"type": "message",
"text": "This is a reply!"
}
如果您使用的是NodeJS,可以试试this sample code
我在C#中创建了一个azure函数作为自定义bot的回调,并且最初发回一个json字符串,但是没有用。最后,我必须设置响应对象的Content
和ContentType
才能使其正常工作(如图here所示)。下面是一个简单机器人的代码,用于回显用户在频道中输入的内容,随时可以根据您的场景进行调整。
自定义MS团队使用azure函数设置示例代码
#r "Newtonsoft.Json"
using System.Net;
using System.Net.Http.Headers;
using Newtonsoft.Json;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
// parse query parameter
string name = req.GetQueryNameValuePairs()
.FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
.Value;
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
log.Info(JsonConvert.SerializeObject(data));
// Set name to query string or body data
name = name ?? data?.text;
Response res = new Response();
res.type = "Message";
res.text = $"You said:{name}";
var response = req.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(JsonConvert.SerializeObject(res));
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
return response;
}
public class Response {
public string type;
public string text;
}