О linebot message API?
LineBot-это бесплатный инструмент для реализации системы линейных ботов. Ссылку как следовать:
Лайнбот
В прошлом году я попытался использовать Azure для реализации линейного бота(с пробной версией Bot API), и он работает очень хорошо.
Но на прошлой неделе я получил письмо от Line , и в нем говорилось, что Line остановит эти сервисы и переместит этот сервис в "Message API".
Я написал webhook fumction для своей функции linebot on Azure.
но это не работает.
Если я хочу отправить сообщение конкретному человеку, мне нужен идентификатор пользователя.
если я не смогу получить userId из функции webhook, это будет проблемой. Спасибо.
Кстати, функция push работает, если у меня сначала есть userId.
#r "Newtonsoft.Json" using System; using System.Net; using Newtonsoft.Json; using System.Net; using System.IO; public static async Task<object> Run(HttpRequestMessage req, TraceWriter log) { log.Info($"Webhook was triggered!"); log.Verbose($"req: {req}"); log.Verbose($"log: {log}"); string jsonContent = await req.Content.ReadAsStringAsync(); dynamic data = JsonConvert.DeserializeObject(jsonContent); log.Verbose($"jsonContent: {jsonContent}"); // get jsonContent information. // reply userid log.Info($"start loop"); string l_userId= ""; string l_replyToken= ""; using (JsonTextReader reader = new JsonTextReader(new StringReader(jsonContent))) { string l_value = ""; int l_flag = 0; while (reader.Read()) { try{ l_value = (string)reader.Value; if (l_value.Equals("userId")){ reader.Read(); l_userId = l_value; } if (l_value.Equals("replyToken")){ reader.Read(); l_replyToken =l_value; } } catch(Exception ex){ log.Verbose($"error: {ex.ToString()}"); } } log.Info($"in loop"); } log.Info($"out loop"); // do a post to line service string Url = "https://api.line.me/v2/bot/message/reply"; var httpWebRequest = (HttpWebRequest)WebRequest.Create(Url); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; httpWebRequest.Headers.Add("Authorization", "Bearer " + "{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}"); using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = ""; json = json + "{"; //json = json + "\"to\": \"xxxxxxxxxxxxxxxxxxxxxxxxxxx\","; json = json + "\"replyToken\":\"" + l_replyToken + "\",\n"; json = json + "\"messages\":["; json = json + "{"; json = json + "\"type\":\"text\","; json = json + "\"text\":\"" + l_userId + "\"\n"; json = json + "}"; json = json + "]"; json = json + "}"; streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); } var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var result = streamReader.ReadToEnd(); } return req.CreateResponse(HttpStatusCode.OK, ""); }
Я попытался использовать push-сообщение, чтобы отправить сообщение обратно, но оно показывает "userId".
#r "Newtonsoft.Json" using System; using System.Net; using Newtonsoft.Json; using System.Net; using System.IO; public static async Task<object> Run(HttpRequestMessage req, TraceWriter log) { log.Info($"Webhook was triggered!"); log.Verbose($"req: {req}"); log.Verbose($"log: {log}"); string jsonContent = await req.Content.ReadAsStringAsync(); dynamic data = JsonConvert.DeserializeObject(jsonContent); log.Verbose($"jsonContent: {jsonContent}"); // get jsonContent information. // reply userid log.Info($"start loop"); string l_userId= ""; string l_replyToken= ""; using (JsonTextReader reader = new JsonTextReader(new StringReader(jsonContent))) { string l_value = ""; int l_flag = 0; while (reader.Read()) { try{ l_value = (string)reader.Value; if (l_value.Equals("userId")){ reader.Read(); l_userId = l_value; } if (l_value.Equals("replyToken")){ reader.Read(); l_replyToken =l_value; } } catch(Exception ex){ log.Verbose($"error: {ex.ToString()}"); } } log.Info($"in loop"); } log.Info($"out loop"); // do a post to line service string Url = "https://api.line.me/v2/bot/message/push"; var httpWebRequest = (HttpWebRequest)WebRequest.Create(Url); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; httpWebRequest.Headers.Add("Authorization", "Bearer " + "{xxxxxxxxxxxxxxxxxxxxxxx}"); using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = ""; json = json + "{"; json = json + "\"to\": \"xxxxxxxxxxxxxxxxxxxx\","; //json = json + "\"replyToken\":\"" + l_replyToken + "\",\n"; json = json + "\"messages\":["; json = json + "{"; json = json + "\"type\":\"text\","; json = json + "\"text\":\"" + l_userId + "\"\n"; json = json + "}"; json = json + "]"; json = json + "}"; streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); } var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var result = streamReader.ReadToEnd(); } return req.CreateResponse(HttpStatusCode.OK, ""); }
Что я уже пробовал:
Информация об этой функции.
Richard MacCutchan
Свяжитесь с людьми, которые послали вам сообщение.