Outgoing WebHooks와 Function App의 연계를 한 이야기

했던 일



Slack의 Outgoing Webhooks를 Azure의 Function App을 사용하여 실현하려고 시도하고 실패 (?)했다.

참고로 한 사이트



htp : // bg.ぃ9ぇ. 네 t/엔 try/2016/04/01/042452
ぃ tp // m / 치케 0905 / ms / 58222 99 460f325 ab8

Azure에서 작업


  • Function App을 만듭니다.
  • 새 함수에서 템플릿 선택을 열고 GenericWebHook-CSharp를 선택합니다.


  • 함수 이름을 적절하게 결정하고 작성 버튼을 누릅니다.
  • 자동으로 템플릿이 생성됩니다.


  • 적절하게 다시 작성한다. (이번에는 bot를 시작한 사용자 이름에 대답했습니다.)

  • run.csx
        string jsonContent = await req.Content.ReadAsStringAsync();
        dynamic data = JsonConvert.DeserializeObject(jsonContent);
    
        return req.CreateResponse(HttpStatusCode.OK, new {
            text = $"Hello {data.user_name}!"
        });
    
  • 로그에 Compilation succeeded.가 나오면 오류없이 컴파일에 성공한 것입니다.
  • 코드를 작성하는 편집기 위에 함수 URL이 있으므로 복사하십시오.
  • 왼쪽 함수 목록에서 통합을 클릭하여 HTTP trigger (req) 모드를 Standard로 변경합니다. (왠지 WebHook이라면 움직이지 않는다)



  • Slack에서 작업



    Outgoing WebHooks의 자세한 사용법은 URL을 참고해 주었으면 한다.
    ぃ tp // m / 치케 0905 / ms / 58222 99 460f325 ab8

    방금 복사 한 함수의 URL을 이미지의 URL (s)에 붙여 넣습니다.


    막상운용



    Slack에서 bot를 시작하는 단어를 게시하십시오.

    .
    .
    .

    움직이지 않는다.

    왜?



    Function App의 로그를 보면,

    Exception while executing function: Functions.(함수 이름). Newtonsoft.Json: Error parsing boolean value. Path '', line 1, position 1.

    라고 출력되고 있다.
    즉, Json을 구문 분석 할 때 오류가 발생하여 프로그램이 멈춘 것 같습니다.

    그래서 디버그로 Json의 내용을 로그에 출력해 보았다.
    그러면 Slack의 데이터 형식이



    이 데이터를 & 단락으로 한 형태였다. (소라 오류도 발생합니다)

    요약



    Slack에서 WebHook이 날아 오는 것이었기 때문에, C#의 Newtonsoft.json에서 확실히 디시리얼라이즈할 수 있다고 생각해 고생했다.
    우선 대응으로
  • Slack의 정보를 사용하지 않는 bot로 만듭니다 (즉, 비 직렬화하지 않음).
  • Slack의 정보를 &로 Split하여 억지로 운영

  • 하지만 솔직히 멋지지 않기 때문에 개선하고 싶다.

    좋은 웹페이지 즐겨찾기