close

  這兩天在趕老大派的QA作業,我的第一要務是要把讓Manager可以按approvereject的按鈕的slack bot自動通知RFC request訊息中的reject鈕可以在按下時添加comment告訴QA為何被reject RFC request

  要在slack 上串起這個功能其實不難,只要添加個DialogManager可以在按下Reject Button之後可以彈出讓其輸入Comment再按下確認即可。如此再回覆給RFC 訊息發出人的自動訊息中就會加上Reject Comment在訊息上。

  一路上過關斬將,再實作該功能的過程中還算順利,但偏偏就在快完成之前卡在最後一關:就是彈出對話框輸入完Comment之後,按下Confirm Button竟然關不掉對話框,真是見鬼了!真是~

  如圖,當按下Confirm之後,Dialog就會出現錯誤: We had some trouble connecting. Try again? 但不管try n gain 還是一樣,對話框怎麼關都關不掉,這還著實傷人腦筋!

  後來一步一步做Debug以及上網查詢解說之後,終於對解題方向有些眉目,也終於在漸進式解決問題的策略一連串實施加猛攻之後,最後我還是成功地關掉這個該死的對話框。

  首先,我搞錯一個重點!這個對話框無法關閉跟對話框打不開是兩件無關的事!Why? 因為在Debug過程中我一直以為在log 中我所看到的 {"ok":false,"error":"dialog_invalid_response_json"} response 是因為呼叫slack dialog.open API 失敗所出現的 error message

  但事實上這是在對話框出現後,填完 Comment 按下 Confirm之後才會收到的 response ,事實上後來我發現在這個 log 之前,還有另一個 {“ok”: true} response,而這正是在彈出對話框時才出現的message,到這邊我才確定我呼叫 dialog.open API 完全沒問題,但我卻已經花很多心力在 trace 這代罪羔羊。

  然後接著我靈機一動,用We had some trouble connecting.當關鍵字去google看有沒有人遇到同樣的問題,然後在以下兩篇文章發現解法。

  首先在 Slack Dialog gives an error 這一篇討論中,看到有人問了同樣的問題,而回答他問題的人按照他的Code請他把原先回應{“status”:200,”message”: “ok”} 改成只回 {“status”:200,”message”: “”} ,也就是不要在message加任何內容。

 某人的問題

 不是正確的解答

  但這不是問題的解法,我照這種作法在處理對話框” dialog_submission” event code中試好了多種不同回應,但最終仍會看見 {"ok":false,"error":"dialog_invalid_response_json"} error response。 這代表我為 ” dialog_submission” 回應的 response 資料格式一直是有問題的,而該文中提問者確實也未解決他的問題。

  然後我發現該文中有人提供另一個連結做參考,我連結到這個討論頁:Slack dialog doesn't close after form submission ,我看到了一段話讓我真正領悟了解法。

  這段話是說當我們試圖 dialog_submission event 設計一個 response 時,http status code 應當回 200 ,但不該帶有任何訊息,於是我最後return {},然後就成功關掉對話框了

  原來,dialog_submission 只看 Http Status Code 200 並將其視為成功回應,任何帶有http status code 以外的訊息都會被dialog 視為發生錯誤,也因此我才會關不了Dialog

  用 return {} 之所以會成功主要是因為我用的是在 AWS API Gateway 上的 python 語言,lambda_handler function沒拋出exception 便代表 return http status code 200 , 此時在 lambda_handler function return 任何東西都會被帶上 http response body ,自然就被視為 我的程式告訴 dialog_submission 我對於Dialog要求submit東西的事件處理失敗!

 

[Reference]

  1. https://stackoverflow.com/questions/48785279/slack-dialog-gives-an-error?noredirect=1&lq=1
  2. https://stackoverflow.com/questions/48714834/slack-dialog-doesnt-close-after-form-submission

 

2019129日星期二

arrow
arrow

    jackterrylau 發表在 痞客邦 留言(1) 人氣()