peterhuang1kimo Ответов: 0

О 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

Свяжитесь с людьми, которые послали вам сообщение.

0 Ответов