diff --git a/src/webhook/handlers/__fixtures__/initState.ts b/src/webhook/handlers/__fixtures__/initState.ts index 90feae67..94a7bd33 100644 --- a/src/webhook/handlers/__fixtures__/initState.ts +++ b/src/webhook/handlers/__fixtures__/initState.ts @@ -14,6 +14,7 @@ export const longArticle: GqlResponse = { text: '計程車上有裝悠遊卡感應器,老人悠悠卡可以享受優惠部分由政府補助,不影響司機收入,下車時使用老人悠遊卡,跳錶車資105元,優惠32元,只扣73元,哈哈,這是屬於我們的福利,與大家分享,可以善加利用!=7折,朋友使用ok', id: 'AVvY-yizyCdS-nWhuYWx', articleType: 'VIDEO', + attachmentUrl: null, }, highlight: { text: '計程車上有裝悠遊卡感應器,老人悠悠卡可以享受優惠部分由政府補助,不影響司機收入,下車時使用老人悠遊卡,跳錶車資105元,優惠32元,只扣73元,哈哈,這是屬於我們的福利,與大家分享,可以善加利用!=7折,朋友使用ok', @@ -36,6 +37,7 @@ export const twelveLongArticles: GqlResponse = { text: '這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118', id: 'AV00D5G-yCdS-nWhucFj', articleType: 'TEXT', + attachmentUrl: null, }, highlight: { text: '這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118 這樣的大事國內媒體竟然不敢報導!\n我國駐日代表將原「中華民國」申請更名為「台灣」結果被日本裁罰,須繳納7000萬日圓(合約台幣2100萬元)高額稅賦(轉載中時電子報)\n\n我駐日代表謝長廷將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭自認友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元)高額稅賦...民進黨沒想到如此更名竟然是這樣的下場:被他最信任也最友好的日本政府給坑了。\n果然錯誤的政策比貪污可怕,2100萬就這樣打水漂了,還要資助九州水患,核四停建違約賠償金.......夠全國軍公教退休2次.........\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118', @@ -47,6 +49,7 @@ export const twelveLongArticles: GqlResponse = { text: '●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n', id: 'AV0x1TlTyCdS-nWhucDm', articleType: 'TEXT', + attachmentUrl: null, }, highlight: { text: '●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n ●我國駐日代表將原「中華民國」申請更名為~「台灣」,結果被日本國裁罰,須繳納7000萬日圓(合約台幣2100萬元…)的高額稅賦,(被封殺的電視新聞~這難道不是民脂民膏嗎…?)...轉載中時電子報\n\n我駐日代表-謝長廷,將原「中華民國」申請更名為「台灣」,自認得意之時,結果遭…友好日本國給出賣了,必須繳納7000萬日圓(合約台幣2100萬元…,這難到不是 人民的血汗錢嗎…?)高額稅賦...!\n民進黨沒想到,如此更名,竟然是這樣的下場:\n被他最信任,也最友好的日本政府給坑了,堂堂一個駐日代表謝長廷,竟然被日本乾爹給坑了,實在是無顏見江東父老…! ......\n\nhttp://www.chinatimes.com/newspapers/20170617000318-260118\n\n', @@ -58,6 +61,7 @@ export const twelveLongArticles: GqlResponse = { text: 'http://www.chinatimes.com/newspapers/20170617000318-260118', id: 'AV00D5G-yCdS-nWhucAA', articleType: 'TEXT', + attachmentUrl: null, }, highlight: { text: null, @@ -91,6 +95,7 @@ export const shortArticle: GqlResponse = { text: 'YouTube · 寻找健康人生', // Space variant id: 'AVvY-yizyCdS-nWhuYWx', articleType: 'TEXT', + attachmentUrl: null, }, highlight: { text: 'YouTube · 寻找健康人生', @@ -111,6 +116,7 @@ export const twoShortArticles: GqlResponse = { text: 'YouTube · 寻找健康人生', // Space variant id: 'AVvY-yizyCdS-nWhuYWx', articleType: 'TEXT', + attachmentUrl: null, }, highlight: { text: 'YouTube · 寻找健康人生', @@ -122,6 +128,7 @@ export const twoShortArticles: GqlResponse = { text: 'YouTube\n·\n寻找健康人生', // Another space variant id: 'AVvY-yizyCdS-nWhuYWy', articleType: 'TEXT', + attachmentUrl: null, }, highlight: { text: 'YouTube\n·\n寻找健康人生', @@ -142,6 +149,7 @@ export const hyperlinksArticles: GqlResponse = { text: 'http://www.chinatimes.com/newspapers/20170617000318-260118', id: 'AVvY-yizyCdS-nWhuYGA', articleType: 'TEXT', + attachmentUrl: null, }, highlight: { text: null, @@ -164,6 +172,7 @@ export const hyperlinksArticles: GqlResponse = { text: 'https://www.youtube.com/feed/trending', // Another space variant id: 'AVvY-yizyCdS-nWhuYGB', articleType: 'TEXT', + attachmentUrl: null, }, highlight: { text: null, diff --git a/src/webhook/handlers/__tests__/__snapshots__/initState.test.ts.snap b/src/webhook/handlers/__tests__/__snapshots__/initState.test.ts.snap index 37fb4946..a0b6a3f5 100644 --- a/src/webhook/handlers/__tests__/__snapshots__/initState.test.ts.snap +++ b/src/webhook/handlers/__tests__/__snapshots__/initState.test.ts.snap @@ -14,13 +14,42 @@ Object { }, "replies": Array [ Object { - "text": "🔍 There are some messages that looks similar to \\"計程車上有裝悠遊卡感⋯⋯\\" you have sent to me.", - "type": "text", + "altText": "🔍 There are some messages that looks similar to \\"計程車上有裝悠遊卡感⋯⋯\\" you have sent to me.", + "contents": Object { + "body": Object { + "contents": Array [ + Object { + "text": "🔍 There are some messages that looks similar to \\"計程車上有裝悠遊卡感⋯⋯\\" you have sent to me.", + "type": "text", + "wrap": true, + }, + ], + "layout": "vertical", + "type": "box", + }, + "type": "bubble", + }, + "type": "flex", }, Object { - "text": "Internet rumors are often mutated and shared. + "altText": "Internet rumors are often mutated and shared. Please choose the version that looks the most similar👇", - "type": "text", + "contents": Object { + "body": Object { + "contents": Array [ + Object { + "text": "Internet rumors are often mutated and shared. +Please choose the version that looks the most similar👇", + "type": "text", + "wrap": true, + }, + ], + "layout": "vertical", + "type": "box", + }, + "type": "bubble", + }, + "type": "flex", }, Object { "altText": "Please choose the most similar message from the list.", @@ -32,7 +61,7 @@ Please choose the version that looks the most similar👇", Object { "color": "#ff7b7b", "size": "sm", - "text": "(Words found in transcript)", + "text": "(Text in transcript)", "type": "text", "weight": "bold", }, @@ -51,15 +80,13 @@ Please choose the version that looks the most similar👇", ], "flex": 0, "gravity": "top", - "maxLines": 6, + "maxLines": 12, "type": "text", "weight": "regular", "wrap": true, }, ], "layout": "vertical", - "margin": "none", - "spacing": "none", "type": "box", }, "direction": "ltr", @@ -68,7 +95,7 @@ Please choose the version that looks the most similar👇", Object { "action": Object { "data": "{\\"input\\":\\"AVvY-yizyCdS-nWhuYWx\\",\\"sessionId\\":1497994017447,\\"state\\":\\"CHOOSING_ARTICLE\\"}", - "displayText": "I choose “計程車上有裝悠遊卡感應器,老人悠悠卡可以享受...”", + "displayText": "I choose ①", "label": "Choose this one", "type": "postback", }, @@ -82,26 +109,22 @@ Please choose the version that looks the most similar👇", }, "header": Object { "contents": Array [ - Object { - "flex": 0, - "text": "😀", - "type": "text", - }, Object { "color": "#AAAAAA", "gravity": "center", "size": "sm", - "text": "Looks 52% similar", + "text": "① Looks 52% similar", "type": "text", "weight": "bold", "wrap": true, }, ], "layout": "horizontal", - "paddingBottom": "none", - "spacing": "md", + "paddingBottom": "md", + "spacing": "sm", "type": "box", }, + "hero": undefined, "type": "bubble", }, Object { @@ -179,13 +202,42 @@ Object { }, "replies": Array [ Object { - "text": "🔍 There are some messages that looks similar to \\"YouTube · ⋯⋯\\" you have sent to me.", - "type": "text", + "altText": "🔍 There are some messages that looks similar to \\"YouTube · ⋯⋯\\" you have sent to me.", + "contents": Object { + "body": Object { + "contents": Array [ + Object { + "text": "🔍 There are some messages that looks similar to \\"YouTube · ⋯⋯\\" you have sent to me.", + "type": "text", + "wrap": true, + }, + ], + "layout": "vertical", + "type": "box", + }, + "type": "bubble", + }, + "type": "flex", }, Object { - "text": "Internet rumors are often mutated and shared. + "altText": "Internet rumors are often mutated and shared. Please choose the version that looks the most similar👇", - "type": "text", + "contents": Object { + "body": Object { + "contents": Array [ + Object { + "text": "Internet rumors are often mutated and shared. +Please choose the version that looks the most similar👇", + "type": "text", + "wrap": true, + }, + ], + "layout": "vertical", + "type": "box", + }, + "type": "bubble", + }, + "type": "flex", }, Object { "altText": "Please choose the most similar message from the list.", @@ -215,15 +267,13 @@ Please choose the version that looks the most similar👇", ], "flex": 0, "gravity": "top", - "maxLines": 6, + "maxLines": 12, "type": "text", "weight": "regular", "wrap": true, }, ], "layout": "vertical", - "margin": "none", - "spacing": "none", "type": "box", }, "direction": "ltr", @@ -232,7 +282,7 @@ Please choose the version that looks the most similar👇", Object { "action": Object { "data": "{\\"input\\":\\"AVvY-yizyCdS-nWhuYWx\\",\\"sessionId\\":1497994017447,\\"state\\":\\"CHOOSING_ARTICLE\\"}", - "displayText": "I choose “YouTube · 寻找健康人生”", + "displayText": "I choose ①", "label": "Choose this one", "type": "postback", }, @@ -246,26 +296,22 @@ Please choose the version that looks the most similar👇", }, "header": Object { "contents": Array [ - Object { - "flex": 0, - "text": "😄", - "type": "text", - }, Object { "color": "#AAAAAA", "gravity": "center", "size": "sm", - "text": "Looks 100% similar", + "text": "① Looks 100% similar", "type": "text", "weight": "bold", "wrap": true, }, ], "layout": "horizontal", - "paddingBottom": "none", - "spacing": "md", + "paddingBottom": "md", + "spacing": "sm", "type": "box", }, + "hero": undefined, "type": "bubble", }, Object { @@ -294,15 +340,13 @@ Please choose the version that looks the most similar👇", ], "flex": 0, "gravity": "top", - "maxLines": 6, + "maxLines": 12, "type": "text", "weight": "regular", "wrap": true, }, ], "layout": "vertical", - "margin": "none", - "spacing": "none", "type": "box", }, "direction": "ltr", @@ -311,9 +355,7 @@ Please choose the version that looks the most similar👇", Object { "action": Object { "data": "{\\"input\\":\\"AVvY-yizyCdS-nWhuYWy\\",\\"sessionId\\":1497994017447,\\"state\\":\\"CHOOSING_ARTICLE\\"}", - "displayText": "I choose “YouTube -· -寻找健康人生”", + "displayText": "I choose ②", "label": "Choose this one", "type": "postback", }, @@ -327,26 +369,22 @@ Please choose the version that looks the most similar👇", }, "header": Object { "contents": Array [ - Object { - "flex": 0, - "text": "😄", - "type": "text", - }, Object { "color": "#AAAAAA", "gravity": "center", "size": "sm", - "text": "Looks 100% similar", + "text": "② Looks 100% similar", "type": "text", "weight": "bold", "wrap": true, }, ], "layout": "horizontal", - "paddingBottom": "none", - "spacing": "md", + "paddingBottom": "md", + "spacing": "sm", "type": "box", }, + "hero": undefined, "type": "bubble", }, ], @@ -661,13 +699,42 @@ Object { }, "replies": Array [ Object { - "text": "🔍 There are some messages that looks similar to \\"YouTube · ⋯⋯\\" you have sent to me.", - "type": "text", + "altText": "🔍 There are some messages that looks similar to \\"YouTube · ⋯⋯\\" you have sent to me.", + "contents": Object { + "body": Object { + "contents": Array [ + Object { + "text": "🔍 There are some messages that looks similar to \\"YouTube · ⋯⋯\\" you have sent to me.", + "type": "text", + "wrap": true, + }, + ], + "layout": "vertical", + "type": "box", + }, + "type": "bubble", + }, + "type": "flex", }, Object { - "text": "Internet rumors are often mutated and shared. + "altText": "Internet rumors are often mutated and shared. Please choose the version that looks the most similar👇", - "type": "text", + "contents": Object { + "body": Object { + "contents": Array [ + Object { + "text": "Internet rumors are often mutated and shared. +Please choose the version that looks the most similar👇", + "type": "text", + "wrap": true, + }, + ], + "layout": "vertical", + "type": "box", + }, + "type": "bubble", + }, + "type": "flex", }, Object { "altText": "Please choose the most similar message from the list.", @@ -679,7 +746,7 @@ Please choose the version that looks the most similar👇", Object { "color": "#ff7b7b", "size": "sm", - "text": "(Words found in the hyperlink)", + "text": "(Text in the hyperlink)", "type": "text", "weight": "bold", }, @@ -733,15 +800,13 @@ summary2 summary2 summary2 ", ], "flex": 0, "gravity": "top", - "maxLines": 6, + "maxLines": 12, "type": "text", "weight": "regular", "wrap": true, }, ], "layout": "vertical", - "margin": "none", - "spacing": "none", "type": "box", }, "direction": "ltr", @@ -750,7 +815,7 @@ summary2 summary2 summary2 ", Object { "action": Object { "data": "{\\"input\\":\\"AVvY-yizyCdS-nWhuYGB\\",\\"sessionId\\":1497994017447,\\"state\\":\\"CHOOSING_ARTICLE\\"}", - "displayText": "I choose “https://www.youtube.co...”", + "displayText": "I choose ①", "label": "Choose this one", "type": "postback", }, @@ -764,26 +829,22 @@ summary2 summary2 summary2 ", }, "header": Object { "contents": Array [ - Object { - "flex": 0, - "text": "😐", - "type": "text", - }, Object { "color": "#AAAAAA", "gravity": "center", "size": "sm", - "text": "Looks 12% similar", + "text": "① Looks 12% similar", "type": "text", "weight": "bold", "wrap": true, }, ], "layout": "horizontal", - "paddingBottom": "none", - "spacing": "md", + "paddingBottom": "md", + "spacing": "sm", "type": "box", }, + "hero": undefined, "type": "bubble", }, Object { @@ -792,7 +853,7 @@ summary2 summary2 summary2 ", Object { "color": "#ff7b7b", "size": "sm", - "text": "(Words found in the hyperlink)", + "text": "(Text in the hyperlink)", "type": "text", "weight": "bold", }, @@ -846,15 +907,13 @@ title2 title2 title2 ", ], "flex": 0, "gravity": "top", - "maxLines": 6, + "maxLines": 12, "type": "text", "weight": "regular", "wrap": true, }, ], "layout": "vertical", - "margin": "none", - "spacing": "none", "type": "box", }, "direction": "ltr", @@ -863,7 +922,7 @@ title2 title2 title2 ", Object { "action": Object { "data": "{\\"input\\":\\"AVvY-yizyCdS-nWhuYGA\\",\\"sessionId\\":1497994017447,\\"state\\":\\"CHOOSING_ARTICLE\\"}", - "displayText": "I choose “http://www.chinatimes....”", + "displayText": "I choose ②", "label": "Choose this one", "type": "postback", }, @@ -877,26 +936,22 @@ title2 title2 title2 ", }, "header": Object { "contents": Array [ - Object { - "flex": 0, - "text": "😐", - "type": "text", - }, Object { "color": "#AAAAAA", "gravity": "center", "size": "sm", - "text": "Looks 0% similar", + "text": "② Looks 0% similar", "type": "text", "weight": "bold", "wrap": true, }, ], "layout": "horizontal", - "paddingBottom": "none", - "spacing": "md", + "paddingBottom": "md", + "spacing": "sm", "type": "box", }, + "hero": undefined, "type": "bubble", }, Object { diff --git a/src/webhook/handlers/__tests__/__snapshots__/processMedia.test.js.snap b/src/webhook/handlers/__tests__/__snapshots__/processMedia.test.js.snap index d1696f94..b670fd23 100644 --- a/src/webhook/handlers/__tests__/__snapshots__/processMedia.test.js.snap +++ b/src/webhook/handlers/__tests__/__snapshots__/processMedia.test.js.snap @@ -13,13 +13,42 @@ Object { }, "replies": Array [ Object { - "text": "🔍 There are some messages that looks similar to the one you have sent to me.", - "type": "text", + "altText": "🔍 There are some messages that looks similar to the one you have sent to me.", + "contents": Object { + "body": Object { + "contents": Array [ + Object { + "text": "🔍 There are some messages that looks similar to the one you have sent to me.", + "type": "text", + "wrap": true, + }, + ], + "layout": "vertical", + "type": "box", + }, + "type": "bubble", + }, + "type": "flex", }, Object { - "text": "Internet rumors are often mutated and shared. + "altText": "Internet rumors are often mutated and shared. Please choose the version that looks the most similar👇", - "type": "text", + "contents": Object { + "body": Object { + "contents": Array [ + Object { + "text": "Internet rumors are often mutated and shared. +Please choose the version that looks the most similar👇", + "type": "text", + "wrap": true, + }, + ], + "layout": "vertical", + "type": "box", + }, + "type": "bubble", + }, + "type": "flex", }, Object { "altText": "Please choose the most similar message from the list.", @@ -336,13 +365,42 @@ Object { }, "replies": Array [ Object { - "text": "🔍 There are some messages that looks similar to the one you have sent to me.", - "type": "text", + "altText": "🔍 There are some messages that looks similar to the one you have sent to me.", + "contents": Object { + "body": Object { + "contents": Array [ + Object { + "text": "🔍 There are some messages that looks similar to the one you have sent to me.", + "type": "text", + "wrap": true, + }, + ], + "layout": "vertical", + "type": "box", + }, + "type": "bubble", + }, + "type": "flex", }, Object { - "text": "Internet rumors are often mutated and shared. + "altText": "Internet rumors are often mutated and shared. Please choose the version that looks the most similar👇", - "type": "text", + "contents": Object { + "body": Object { + "contents": Array [ + Object { + "text": "Internet rumors are often mutated and shared. +Please choose the version that looks the most similar👇", + "type": "text", + "wrap": true, + }, + ], + "layout": "vertical", + "type": "box", + }, + "type": "bubble", + }, + "type": "flex", }, Object { "altText": "Please choose the most similar message from the list.", @@ -584,13 +642,42 @@ Object { }, "replies": Array [ Object { - "text": "🔍 There are some messages that looks similar to the one you have sent to me.", - "type": "text", + "altText": "🔍 There are some messages that looks similar to the one you have sent to me.", + "contents": Object { + "body": Object { + "contents": Array [ + Object { + "text": "🔍 There are some messages that looks similar to the one you have sent to me.", + "type": "text", + "wrap": true, + }, + ], + "layout": "vertical", + "type": "box", + }, + "type": "bubble", + }, + "type": "flex", }, Object { - "text": "Internet rumors are often mutated and shared. + "altText": "Internet rumors are often mutated and shared. Please choose the version that looks the most similar👇", - "type": "text", + "contents": Object { + "body": Object { + "contents": Array [ + Object { + "text": "Internet rumors are often mutated and shared. +Please choose the version that looks the most similar👇", + "type": "text", + "wrap": true, + }, + ], + "layout": "vertical", + "type": "box", + }, + "type": "bubble", + }, + "type": "flex", }, Object { "altText": "Please choose the most similar message from the list.", diff --git a/src/webhook/handlers/__tests__/initState.test.ts b/src/webhook/handlers/__tests__/initState.test.ts index 6a0b373a..7208a71f 100644 --- a/src/webhook/handlers/__tests__/initState.test.ts +++ b/src/webhook/handlers/__tests__/initState.test.ts @@ -92,20 +92,16 @@ it('long article replies still below flex message limit', async () => { }); expect(gql.__finished()).toBe(true); expect(result.replies.length).toBeLessThanOrEqual(5); // Reply message API limit - const flexReply = result.replies.find( - (reply): reply is FlexMessage => reply.type === 'flex' + const carouselReply = result.replies.find( + (reply): reply is FlexMessage & { contents: { type: 'carousel' } } => + reply.type === 'flex' && reply.contents.type === 'carousel' ); // Make TS happy /* istanbul ignore if */ - if (!flexReply) throw new Error('No flex reply in replies'); + if (!carouselReply) throw new Error('No carouselReply reply in replies'); - const carousel = flexReply.contents; - - // Make TS happy - /* istanbul ignore if */ - if (carousel.type !== 'carousel') - throw new Error('Flex reply content is not carousel'); + const carousel = carouselReply.contents; expect(carousel.contents.length).toBeLessThanOrEqual(10); // Flex message carousel 10 bubble limit expect(JSON.stringify(carousel).length).toBeLessThan(50 * 1000); // Flex message carousel 50K limit @@ -252,7 +248,7 @@ it('should handle message matches only hyperlinks', async () => { Object { "ea": "Search", "ec": "Article", - "el": "AVvY-yizyCdS-nWhuYGA", + "el": "AVvY-yizyCdS-nWhuYGB", "ni": true, }, ], @@ -260,7 +256,7 @@ it('should handle message matches only hyperlinks', async () => { Object { "ea": "Search", "ec": "Article", - "el": "AVvY-yizyCdS-nWhuYGB", + "el": "AVvY-yizyCdS-nWhuYGA", "ni": true, }, ], diff --git a/src/webhook/handlers/__tests__/processMedia.test.js b/src/webhook/handlers/__tests__/processMedia.test.js index f23cf80e..a4b7af28 100644 --- a/src/webhook/handlers/__tests__/processMedia.test.js +++ b/src/webhook/handlers/__tests__/processMedia.test.js @@ -149,8 +149,10 @@ it('twelve articles found', async () => { expect(result).toMatchSnapshot(); expect(gql.__finished()).toBe(true); expect(result.replies.length).toBeLessThanOrEqual(5); // Reply message API limit - const carousel = result.replies.find(({ type }) => type === 'flex').contents; - expect(carousel.type).toBe('carousel'); + const carousel = result.replies.find( + ({ type, contents }) => type === 'flex' && contents.type === 'carousel' + ).contents; + expect(carousel).not.toBe(null); expect(carousel.contents.length).toBeLessThanOrEqual(10); // Flex message carousel 10 bubble limit expect(JSON.stringify(carousel).length).toBeLessThan(50 * 1000); // Flex message carousel 50K limit }); diff --git a/src/webhook/handlers/askingArticleSource.ts b/src/webhook/handlers/askingArticleSource.ts index 2ae3f233..470e1621 100644 --- a/src/webhook/handlers/askingArticleSource.ts +++ b/src/webhook/handlers/askingArticleSource.ts @@ -30,7 +30,7 @@ const askingArticleSource: ChatbotPostbackHandler = async ({ try { input = inputSchema.parse(postbackInput); } catch (e) { - console.error('[choosingReply]', e); + console.error('[askingArticleSource]', e); throw new ManipulationError(t`Please choose from provided options.`); } diff --git a/src/webhook/handlers/initState.ts b/src/webhook/handlers/initState.ts index 13f5bca1..67c6deb9 100644 --- a/src/webhook/handlers/initState.ts +++ b/src/webhook/handlers/initState.ts @@ -1,33 +1,24 @@ -import stringSimilarity from 'string-similarity'; import { t } from 'ttag'; -import { - FlexBubble, - FlexComponent, - FlexMessage, - Message, - TextMessage, -} from '@line/bot-sdk'; +import { FlexBubble, FlexMessage, Message } from '@line/bot-sdk'; + import type { Result, Context, CooccurredMessage, } from 'src/types/chatbotState'; -import gql from 'src/lib/gql'; +import ga from 'src/lib/ga'; +import detectDialogflowIntent from 'src/lib/detectDialogflowIntent'; + import { createPostbackAction, ellipsis, POSTBACK_NO_ARTICLE_FOUND, - createHighlightContents, createTextMessage, createArticleSourceReply, + searchText, + createSearchResultCarouselContents, } from './utils'; -import ga from 'src/lib/ga'; -import detectDialogflowIntent from 'src/lib/detectDialogflowIntent'; import choosingArticle from './choosingArticle'; -import { - ListArticlesInInitStateQuery, - ListArticlesInInitStateQueryVariables, -} from 'typegen/graphql'; const SIMILARITY_THRESHOLD = 0.95; @@ -81,43 +72,16 @@ const initState = async ({ } // Search for articles - const { - data: { ListArticles }, - } = await gql` - query ListArticlesInInitState($text: String!) { - ListArticles( - filter: { moreLikeThis: { like: $text } } - orderBy: [{ _score: DESC }] - first: 4 - ) { - edges { - node { - text - id - articleType - } - highlight { - text - hyperlinks { - title - summary - } - } - } - } - } - `({ - text: input, - }); + const result = await searchText(input); const inputSummary = ellipsis(input, 12); - if (ListArticles?.edges.length) { + if (result.edges.length) { // Track if find similar Articles in DB. visitor.event({ ec: 'UserInput', ea: 'ArticleSearch', el: 'ArticleFound' }); // Track which Article is searched. And set tracking event as non-interactionHit. - ListArticles.edges.forEach((edge) => { + result.edges.forEach((edge) => { visitor.event({ ec: 'Article', ea: 'Search', @@ -126,23 +90,9 @@ const initState = async ({ }); }); - const edgesSortedWithSimilarity = ListArticles.edges - .map((edge) => ({ - ...edge, - similarity: stringSimilarity.compareTwoStrings( - // Remove spaces so that we count word's similarities only - // - (edge.node.text ?? '').replace(/\s/g, ''), - input.replace(/\s/g, '') - ), - })) - .sort((edge1, edge2) => edge2.similarity - edge1.similarity) - .slice(0, 9); /* flex carousel has at most 10 bubbles */ - - const hasIdenticalDocs = - edgesSortedWithSimilarity[0].similarity >= SIMILARITY_THRESHOLD; + const hasIdenticalDocs = result.edges[0].similarity >= SIMILARITY_THRESHOLD; - if (edgesSortedWithSimilarity.length === 1 && hasIdenticalDocs) { + if (result.edges.length === 1 && hasIdenticalDocs) { visitor.send(); return await choosingArticle({ @@ -151,107 +101,15 @@ const initState = async ({ postbackData: { sessionId: context.sessionId, state: 'CHOOSING_ARTICLE', - input: edgesSortedWithSimilarity[0].node.id, + input: result.edges[0].node.id, }, userId, }); } - const articleOptions: FlexBubble[] = edgesSortedWithSimilarity.map( - ({ node: { text, id, articleType }, highlight, similarity }) => { - const similarityPercentage = Math.round(similarity * 100); - const similarityEmoji = ['😐', '🙂', '😀', '😃', '😄'][ - Math.floor(similarity * 4.999) - ]; - const displayTextWhenChosen = ellipsis(text ?? '', 25, '...'); - - const bodyContents: FlexComponent[] = []; - - const { contents: highlightContents, source: highlightSource } = - createHighlightContents(highlight); - - let highlightSourceInfo = ''; - switch (highlightSource) { - case 'hyperlinks': - highlightSourceInfo = t`(Words found in the hyperlink)`; - break; - case 'text': - if (articleType !== 'TEXT') { - highlightSourceInfo = t`(Words found in transcript)`; - } - } - if (highlightSourceInfo) { - bodyContents.push({ - type: 'text', - text: highlightSourceInfo, - size: 'sm', - color: '#ff7b7b', - weight: 'bold', - }); - } - - bodyContents.push({ - type: 'text', - contents: highlightContents, - maxLines: 6, - flex: 0, - gravity: 'top', - weight: 'regular', - wrap: true, - }); - - return { - type: 'bubble', - direction: 'ltr', - header: { - type: 'box', - layout: 'horizontal', - spacing: 'md', - paddingBottom: 'none', - contents: [ - { - type: 'text', - text: similarityEmoji, - flex: 0, - }, - { - type: 'text', - text: t`Looks ${similarityPercentage}% similar`, - gravity: 'center', - size: 'sm', - weight: 'bold', - wrap: true, - color: '#AAAAAA', - }, - ], - }, - body: { - type: 'box', - layout: 'vertical', - spacing: 'none', - margin: 'none', - contents: bodyContents, - }, - footer: { - type: 'box', - layout: 'horizontal', - contents: [ - { - type: 'button', - action: createPostbackAction( - t`Choose this one`, - id, - t`I choose “${displayTextWhenChosen}”`, - context.sessionId, - 'CHOOSING_ARTICLE' - ), - style: 'primary', - color: '#ffb600', - }, - ], - }, - }; - } + const articleOptions: FlexBubble[] = createSearchResultCarouselContents( + result.edges, + context.sessionId ); // Show "no-article-found" option only when no identical docs are found @@ -321,23 +179,17 @@ const initState = async ({ }, }; - const prefixTextArticleFound = [ - { - type: 'text', + replies = [ + createTextMessage({ text: `🔍 ${t`There are some messages that looks similar to "${inputSummary}" you have sent to me.`}`, - } satisfies TextMessage, - ]; - const textArticleFound = [ - { - type: 'text', + }), + createTextMessage({ text: t`Internet rumors are often mutated and shared. Please choose the version that looks the most similar` + '👇', - } satisfies TextMessage, + }), templateMessage, ]; - - replies = [...prefixTextArticleFound, ...textArticleFound]; } else { // Track if find similar Articles in DB. visitor.event({ diff --git a/src/webhook/handlers/processMedia.ts b/src/webhook/handlers/processMedia.ts index 220a49be..b09a32f4 100644 --- a/src/webhook/handlers/processMedia.ts +++ b/src/webhook/handlers/processMedia.ts @@ -1,11 +1,8 @@ import { t } from 'ttag'; -import type { - FlexBubble, - Message, - FlexMessage, - FlexComponent, -} from '@line/bot-sdk'; +import type { FlexMessage } from '@line/bot-sdk'; + import { Context, CooccurredMessage } from 'src/types/chatbotState'; +import ga from 'src/lib/ga'; import { getLineContentProxyURL, @@ -13,17 +10,11 @@ import { POSTBACK_NO_ARTICLE_FOUND, createTextMessage, createAskArticleSubmissionConsentReply, - createHighlightContents, + searchMedia, + createSearchResultCarouselContents, } from './utils'; -import gql from 'src/lib/gql'; -import ga from 'src/lib/ga'; import choosingArticle from './choosingArticle'; -import { - ListArticlesInProcessMediaQuery, - ListArticlesInProcessMediaQueryVariables, -} from 'typegen/graphql'; -const CIRCLED_DIGITS = '⓪①②③④⑤⑥⑦⑧⑨⑩⑪'; const SIMILARITY_THRESHOLD = 0.95; export default async function (message: CooccurredMessage, userId: string) { @@ -44,50 +35,14 @@ export default async function (message: CooccurredMessage, userId: string) { msgs: [message], }; - const { - data: { ListArticles }, - } = await gql` - query ListArticlesInProcessMedia($mediaUrl: String!) { - ListArticles( - filter: { - mediaUrl: $mediaUrl - articleTypes: [TEXT, IMAGE, AUDIO, VIDEO] - transcript: { shouldCreate: true } - } - orderBy: [{ _score: DESC }] - first: 9 - ) { - edges { - score - mediaSimilarity - node { - id - articleType - attachmentUrl(variant: THUMBNAIL) - } - highlight { - text - hyperlinks { - title - summary - } - } - } - } - } - `( - { - mediaUrl: proxyUrl, - }, - { userId } - ); + const result = await searchMedia(proxyUrl, userId); - if (ListArticles && ListArticles.edges.length) { + if (result && result.edges.length) { // Track if find similar Articles in DB. visitor.event({ ec: 'UserInput', ea: 'ArticleSearch', el: 'ArticleFound' }); // Track which Article is searched. And set tracking event as non-interactionHit. - ListArticles.edges.forEach((edge) => { + result.edges.forEach((edge) => { visitor.event({ ec: 'Article', ea: 'Search', @@ -96,14 +51,10 @@ export default async function (message: CooccurredMessage, userId: string) { }); }); - const edgesSortedWithSimilarity = [...ListArticles.edges].sort( - (a, b) => b.mediaSimilarity - a.mediaSimilarity - ); - const hasIdenticalDocs = - edgesSortedWithSimilarity[0].mediaSimilarity >= SIMILARITY_THRESHOLD; + result.edges[0].mediaSimilarity >= SIMILARITY_THRESHOLD; - if (ListArticles.edges.length === 1 && hasIdenticalDocs) { + if (result.edges.length === 1 && hasIdenticalDocs) { visitor.send(); return await choosingArticle({ @@ -112,134 +63,16 @@ export default async function (message: CooccurredMessage, userId: string) { postbackData: { state: 'CHOOSING_ARTICLE', sessionId: context.sessionId, - input: edgesSortedWithSimilarity[0].node.id, + input: result.edges[0].node.id, }, userId, }); } - const articleOptions = ListArticles.edges - .map( - ( - { - node: { attachmentUrl, id, articleType }, - highlight, - mediaSimilarity, - }, - index - ): FlexBubble => { - const displayTextWhenChosen = CIRCLED_DIGITS[index + 1]; - - const { contents: highlightContents, source: highlightSource } = - createHighlightContents(highlight); - - const similarityPercentage = Math.round(mediaSimilarity * 100); - - const looks = - mediaSimilarity > 0 - ? t`Looks ${similarityPercentage}% similar` - : highlightSource === null - ? t`Similar file` - : t`Contains relevant text`; - - const bodyContents: FlexComponent[] = []; - - if (highlightSource) { - let highlightSourceInfo = ''; - switch (highlightSource) { - case 'hyperlinks': - highlightSourceInfo = t`(Text in the hyperlink)`; - break; - case 'text': - if (articleType !== 'TEXT') { - highlightSourceInfo = t`(Text in transcript)`; - } - } - - if (highlightSourceInfo) { - bodyContents.push({ - type: 'text', - text: highlightSourceInfo, - size: 'sm', - color: '#ff7b7b', - weight: 'bold', - }); - } - - bodyContents.push({ - type: 'text', - contents: highlightContents, - // Show less lines if there are thumbnails to show - maxLines: attachmentUrl ? 5 : 12, - flex: 0, - gravity: 'top', - weight: 'regular', - wrap: true, - }); - } - - return { - type: 'bubble', - direction: 'ltr', - header: { - type: 'box', - layout: 'horizontal', - spacing: 'sm', - paddingBottom: 'md', - contents: [ - { - type: 'text', - text: displayTextWhenChosen + ' ' + looks, - gravity: 'center', - size: 'sm', - weight: 'bold', - wrap: true, - color: '#AAAAAA', - }, - ], - }, - - // Show thumbnail image if available - hero: !attachmentUrl - ? undefined - : { - type: 'image', - url: attachmentUrl, - size: 'full', - }, - - // Show highlighted text if available - body: - bodyContents.length === 0 - ? undefined - : { - type: 'box', - layout: 'vertical', - contents: bodyContents, - }, - - footer: { - type: 'box', - layout: 'horizontal', - contents: [ - { - type: 'button', - action: createPostbackAction( - t`Choose this one`, - id, - t`I choose ${displayTextWhenChosen}`, - context.sessionId, - 'CHOOSING_ARTICLE' - ), - style: 'primary', - color: '#ffb600', - }, - ], - }, - }; - } - ) - .slice(0, 9); /* flex carousel has at most 10 bubbles */ + const articleOptions = createSearchResultCarouselContents( + result.edges, + context.sessionId + ); // Show "no-article-found" option only when no identical docs are found // @@ -308,23 +141,17 @@ export default async function (message: CooccurredMessage, userId: string) { }, }; - const prefixTextArticleFound: Message[] = [ - { - type: 'text', + replies = [ + createTextMessage({ text: `🔍 ${t`There are some messages that looks similar to the one you have sent to me.`}`, - }, - ]; - const textArticleFound: Message[] = [ - { - type: 'text', + }), + createTextMessage({ text: t`Internet rumors are often mutated and shared. Please choose the version that looks the most similar` + '👇', - }, + }), templateMessage, ]; - - replies = prefixTextArticleFound.concat(textArticleFound); } else { visitor.event({ ec: 'UserInput', diff --git a/src/webhook/handlers/utils.graphql b/src/webhook/handlers/utils.graphql index 76d3f22a..2c58a0c4 100644 --- a/src/webhook/handlers/utils.graphql +++ b/src/webhook/handlers/utils.graphql @@ -1,6 +1,7 @@ fragment CreateReferenceWordsReply on Reply { reference type + createdAt } fragment CreateReplyMessagesReply on Reply { @@ -10,6 +11,7 @@ fragment CreateReplyMessagesReply on Reply { fragment CreateReplyMessagesArticle on Article { replyCount + createdAt } fragment CreateHighlightContentsHighlight on Highlights { diff --git a/src/webhook/handlers/utils.ts b/src/webhook/handlers/utils.ts index 6a4c5f62..1e1faf22 100644 --- a/src/webhook/handlers/utils.ts +++ b/src/webhook/handlers/utils.ts @@ -11,6 +11,7 @@ import type { } from '@line/bot-sdk'; import { t, msgid, ngettext } from 'ttag'; import GraphemeSplitter from 'grapheme-splitter'; +import stringSimilarity from 'string-similarity'; import gql from 'src/lib/gql'; import { getArticleURL, createTypeWords, format } from 'src/lib/sharedUtils'; @@ -24,6 +25,10 @@ import type { CreateReferenceWordsReplyFragment, CreateAiReplyMutation, CreateAiReplyMutationVariables, + ListArticlesInInitStateQuery, + ListArticlesInInitStateQueryVariables, + ListArticlesInProcessMediaQuery, + ListArticlesInProcessMediaQueryVariables, } from 'typegen/graphql'; import type { Input as ChoosingReplyInput } from './choosingReply'; @@ -859,3 +864,260 @@ export function getLineContentProxyURL(messageId: string) { return `${process.env.RUMORS_LINE_BOT_URL}/getcontent?token=${jwt}`; } + +/** + * ListArticle result with similarity score + */ +type SearchTextResult = Omit< + ListArticlesInInitStateQuery['ListArticles'], + 'edges' +> & { + edges: Array< + NonNullable< + ListArticlesInInitStateQuery['ListArticles'] + >['edges'][number] & { + similarity: number; + } + >; +}; + +/** + * Searches for text and reorder with string similarity + */ +export async function searchText(text: string): Promise { + const { + data: { ListArticles }, + } = await gql` + query ListArticlesInInitState($text: String!) { + ListArticles( + filter: { moreLikeThis: { like: $text } } + orderBy: [{ _score: DESC }] + first: 4 + ) { + edges { + node { + id + text + articleType + attachmentUrl(variant: THUMBNAIL) + } + highlight { + text + hyperlinks { + title + summary + } + } + } + } + } + `({ + text, + }); + + const sanitizedText = text.replace(/\s/g, ''); + const edgesSortedWithSimilarity = + ListArticles?.edges + .map((edge) => ({ + ...edge, + similarity: stringSimilarity.compareTwoStrings( + // Remove spaces so that we count word's similarities only + // + (edge.node.text ?? '').replace(/\s/g, ''), + sanitizedText + ), + })) + .sort((edge1, edge2) => edge2.similarity - edge1.similarity) ?? []; + + return { + ...ListArticles, + edges: edgesSortedWithSimilarity, + }; +} + +type SearchMediaResult = Omit< + ListArticlesInProcessMediaQuery['ListArticles'], + 'edges' +> & { + edges: NonNullable['edges']; +}; + +export async function searchMedia( + mediaUrl: string, + userId: string +): Promise { + const { + data: { ListArticles }, + } = await gql` + query ListArticlesInProcessMedia($mediaUrl: String!) { + ListArticles( + filter: { + mediaUrl: $mediaUrl + articleTypes: [TEXT, IMAGE, AUDIO, VIDEO] + transcript: { shouldCreate: true } + } + orderBy: [{ _score: DESC }] + first: 9 + ) { + edges { + score + mediaSimilarity + node { + id + articleType + attachmentUrl(variant: THUMBNAIL) + } + highlight { + text + hyperlinks { + title + summary + } + } + } + } + } + `( + { mediaUrl }, + { userId } + ); + return { + ...ListArticles, + edges: ListArticles?.edges ?? [], + }; +} + +const CIRCLED_DIGITS = '⓪①②③④⑤⑥⑦⑧⑨⑩⑪'; + +/** + * @param edges - mixed edge data returned by searchText() or searchMedia() + * @param sessionId + * @returns + */ +export function createSearchResultCarouselContents( + edges: ReadonlyArray< + SearchMediaResult['edges'][number] | SearchTextResult['edges'][number] + >, + sessionId: number +): FlexBubble[] { + return edges + .map((edge, index): FlexBubble => { + const isSearchMediaResult = 'mediaSimilarity' in edge; + + // Header + // + const similarityPercentage = Math.round( + (isSearchMediaResult ? edge.mediaSimilarity : edge.similarity) * 100 + ); + const displayTextWhenChosen = CIRCLED_DIGITS[index + 1]; + + const { contents: highlightContents, source: highlightSource } = + createHighlightContents(edge.highlight); + + const looks = + !isSearchMediaResult || edge.mediaSimilarity > 0 + ? t`Looks ${similarityPercentage}% similar` // Used in text search, or when there are similarity scores in media search. + : highlightSource === null + ? t`Similar file` + : t`Contains relevant text`; + + // Body + // + const bodyContents: FlexComponent[] = []; + + let highlightSourceInfo = ''; + switch (highlightSource) { + case 'hyperlinks': + highlightSourceInfo = t`(Text in the hyperlink)`; + break; + case 'text': + if (edge.node.articleType !== 'TEXT') { + highlightSourceInfo = t`(Text in transcript)`; + } + } + + if (highlightSourceInfo) { + bodyContents.push({ + type: 'text', + text: highlightSourceInfo, + size: 'sm', + color: '#ff7b7b', + weight: 'bold', + }); + } + + if (highlightSource && highlightContents.length) { + bodyContents.push({ + type: 'text', + contents: highlightContents, + // Show less lines if there are thumbnails to show + maxLines: edge.node.attachmentUrl ? 5 : 12, + flex: 0, + gravity: 'top', + weight: 'regular', + wrap: true, + }); + } + + return { + type: 'bubble', + direction: 'ltr', + header: { + type: 'box', + layout: 'horizontal', + spacing: 'sm', + paddingBottom: 'md', + contents: [ + { + type: 'text', + text: displayTextWhenChosen + ' ' + looks, + gravity: 'center', + size: 'sm', + weight: 'bold', + wrap: true, + color: '#AAAAAA', + }, + ], + }, + + // Show thumbnail image if available + hero: !edge.node.attachmentUrl + ? undefined + : { + type: 'image', + url: edge.node.attachmentUrl, + size: 'full', + }, + + // Show highlighted text if available + body: + bodyContents.length === 0 + ? undefined + : { + type: 'box', + layout: 'vertical', + contents: bodyContents, + }, + + footer: { + type: 'box', + layout: 'horizontal', + contents: [ + { + type: 'button', + action: createPostbackAction( + t`Choose this one`, + edge.node.id, + t`I choose ${displayTextWhenChosen}`, + sessionId, + 'CHOOSING_ARTICLE' + ), + style: 'primary', + color: '#ffb600', + }, + ], + }, + }; + }) + .slice(0, 9); /* flex carousel has at most 10 bubbles */ +} diff --git a/typegen/gql.ts b/typegen/gql.ts index 149a775d..c4ae6b23 100644 --- a/typegen/gql.ts +++ b/typegen/gql.ts @@ -15,13 +15,13 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ const documents = { "\n mutation SubmitTextArticleUnderConsent($text: String!) {\n CreateArticle(text: $text, reference: { type: LINE }) {\n id\n }\n }\n ": types.SubmitTextArticleUnderConsentDocument, "\n mutation SubmitMediaArticleUnderConsent(\n $mediaUrl: String!\n $articleType: ArticleTypeEnum!\n ) {\n CreateMediaArticle(\n mediaUrl: $mediaUrl\n articleType: $articleType\n reference: { type: LINE }\n ) {\n id\n }\n }\n ": types.SubmitMediaArticleUnderConsentDocument, - "\n query GetArticleInChoosingArticle($id: String!) {\n GetArticle(id: $id) {\n text\n replyCount\n articleType\n articleReplies(status: NORMAL) {\n reply {\n id\n type\n text\n }\n positiveFeedbackCount\n negativeFeedbackCount\n }\n }\n }\n ": types.GetArticleInChoosingArticleDocument, + "\n query GetArticleInChoosingArticle($id: String!) {\n GetArticle(id: $id) {\n text\n replyCount\n articleType\n articleReplies(status: NORMAL) {\n reply {\n id\n type\n text\n }\n positiveFeedbackCount\n negativeFeedbackCount\n }\n createdAt\n }\n }\n ": types.GetArticleInChoosingArticleDocument, "\n mutation SubmitReplyRequestWithoutReason($id: String!) {\n CreateOrUpdateReplyRequest(articleId: $id) {\n replyRequestCount\n }\n }\n ": types.SubmitReplyRequestWithoutReasonDocument, - "\n query GetReplyRelatedData($id: String!, $articleId: String!) {\n GetReply(id: $id) {\n type\n text\n reference\n createdAt\n }\n GetArticle(id: $articleId) {\n text\n replyCount\n }\n }\n ": types.GetReplyRelatedDataDocument, - "\n query ListArticlesInInitState($text: String!) {\n ListArticles(\n filter: { moreLikeThis: { like: $text } }\n orderBy: [{ _score: DESC }]\n first: 4\n ) {\n edges {\n node {\n text\n id\n articleType\n }\n highlight {\n text\n hyperlinks {\n title\n summary\n }\n }\n }\n }\n }\n ": types.ListArticlesInInitStateDocument, + "\n query GetReplyRelatedData($id: String!, $articleId: String!) {\n GetReply(id: $id) {\n type\n text\n reference\n createdAt\n }\n GetArticle(id: $articleId) {\n text\n replyCount\n createdAt\n }\n }\n ": types.GetReplyRelatedDataDocument, + "fragment CreateReferenceWordsReply on Reply {\n reference\n type\n createdAt\n}\n\nfragment CreateReplyMessagesReply on Reply {\n text\n ...CreateReferenceWordsReply\n}\n\nfragment CreateReplyMessagesArticle on Article {\n replyCount\n createdAt\n}\n\nfragment CreateHighlightContentsHighlight on Highlights {\n text\n hyperlinks {\n title\n summary\n }\n}": types.CreateReferenceWordsReplyFragmentDoc, + "\n mutation CreateAIReply($articleId: String!) {\n CreateAIReply(articleId: $articleId) {\n text\n createdAt\n }\n }\n ": types.CreateAiReplyDocument, + "\n query ListArticlesInInitState($text: String!) {\n ListArticles(\n filter: { moreLikeThis: { like: $text } }\n orderBy: [{ _score: DESC }]\n first: 4\n ) {\n edges {\n node {\n id\n text\n articleType\n attachmentUrl(variant: THUMBNAIL)\n }\n highlight {\n text\n hyperlinks {\n title\n summary\n }\n }\n }\n }\n }\n ": types.ListArticlesInInitStateDocument, "\n query ListArticlesInProcessMedia($mediaUrl: String!) {\n ListArticles(\n filter: {\n mediaUrl: $mediaUrl\n articleTypes: [TEXT, IMAGE, AUDIO, VIDEO]\n transcript: { shouldCreate: true }\n }\n orderBy: [{ _score: DESC }]\n first: 9\n ) {\n edges {\n score\n mediaSimilarity\n node {\n id\n articleType\n attachmentUrl(variant: THUMBNAIL)\n }\n highlight {\n text\n hyperlinks {\n title\n summary\n }\n }\n }\n }\n }\n ": types.ListArticlesInProcessMediaDocument, - "fragment CreateReferenceWordsReply on Reply {\n reference\n type\n}\n\nfragment CreateReplyMessagesReply on Reply {\n text\n ...CreateReferenceWordsReply\n}\n\nfragment CreateReplyMessagesArticle on Article {\n replyCount\n}\n\nfragment CreateHighlightContentsHighlight on Highlights {\n text\n hyperlinks {\n title\n summary\n }\n}": types.CreateReferenceWordsReplyFragmentDoc, - "\n mutation CreateAIReply($articleId: String!) {\n CreateAIReply(articleId: $articleId) {\n text\n }\n }\n ": types.CreateAiReplyDocument, }; /** @@ -49,7 +49,7 @@ export function graphql(source: "\n mutation SubmitMediaArticleUnderCon /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query GetArticleInChoosingArticle($id: String!) {\n GetArticle(id: $id) {\n text\n replyCount\n articleType\n articleReplies(status: NORMAL) {\n reply {\n id\n type\n text\n }\n positiveFeedbackCount\n negativeFeedbackCount\n }\n }\n }\n "): (typeof documents)["\n query GetArticleInChoosingArticle($id: String!) {\n GetArticle(id: $id) {\n text\n replyCount\n articleType\n articleReplies(status: NORMAL) {\n reply {\n id\n type\n text\n }\n positiveFeedbackCount\n negativeFeedbackCount\n }\n }\n }\n "]; +export function graphql(source: "\n query GetArticleInChoosingArticle($id: String!) {\n GetArticle(id: $id) {\n text\n replyCount\n articleType\n articleReplies(status: NORMAL) {\n reply {\n id\n type\n text\n }\n positiveFeedbackCount\n negativeFeedbackCount\n }\n createdAt\n }\n }\n "): (typeof documents)["\n query GetArticleInChoosingArticle($id: String!) {\n GetArticle(id: $id) {\n text\n replyCount\n articleType\n articleReplies(status: NORMAL) {\n reply {\n id\n type\n text\n }\n positiveFeedbackCount\n negativeFeedbackCount\n }\n createdAt\n }\n }\n "]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -57,23 +57,23 @@ export function graphql(source: "\n mutation SubmitReplyRequestWithoutReaso /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query GetReplyRelatedData($id: String!, $articleId: String!) {\n GetReply(id: $id) {\n type\n text\n reference\n createdAt\n }\n GetArticle(id: $articleId) {\n text\n replyCount\n }\n }\n "): (typeof documents)["\n query GetReplyRelatedData($id: String!, $articleId: String!) {\n GetReply(id: $id) {\n type\n text\n reference\n createdAt\n }\n GetArticle(id: $articleId) {\n text\n replyCount\n }\n }\n "]; +export function graphql(source: "\n query GetReplyRelatedData($id: String!, $articleId: String!) {\n GetReply(id: $id) {\n type\n text\n reference\n createdAt\n }\n GetArticle(id: $articleId) {\n text\n replyCount\n createdAt\n }\n }\n "): (typeof documents)["\n query GetReplyRelatedData($id: String!, $articleId: String!) {\n GetReply(id: $id) {\n type\n text\n reference\n createdAt\n }\n GetArticle(id: $articleId) {\n text\n replyCount\n createdAt\n }\n }\n "]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query ListArticlesInInitState($text: String!) {\n ListArticles(\n filter: { moreLikeThis: { like: $text } }\n orderBy: [{ _score: DESC }]\n first: 4\n ) {\n edges {\n node {\n text\n id\n articleType\n }\n highlight {\n text\n hyperlinks {\n title\n summary\n }\n }\n }\n }\n }\n "): (typeof documents)["\n query ListArticlesInInitState($text: String!) {\n ListArticles(\n filter: { moreLikeThis: { like: $text } }\n orderBy: [{ _score: DESC }]\n first: 4\n ) {\n edges {\n node {\n text\n id\n articleType\n }\n highlight {\n text\n hyperlinks {\n title\n summary\n }\n }\n }\n }\n }\n "]; +export function graphql(source: "fragment CreateReferenceWordsReply on Reply {\n reference\n type\n createdAt\n}\n\nfragment CreateReplyMessagesReply on Reply {\n text\n ...CreateReferenceWordsReply\n}\n\nfragment CreateReplyMessagesArticle on Article {\n replyCount\n createdAt\n}\n\nfragment CreateHighlightContentsHighlight on Highlights {\n text\n hyperlinks {\n title\n summary\n }\n}"): (typeof documents)["fragment CreateReferenceWordsReply on Reply {\n reference\n type\n createdAt\n}\n\nfragment CreateReplyMessagesReply on Reply {\n text\n ...CreateReferenceWordsReply\n}\n\nfragment CreateReplyMessagesArticle on Article {\n replyCount\n createdAt\n}\n\nfragment CreateHighlightContentsHighlight on Highlights {\n text\n hyperlinks {\n title\n summary\n }\n}"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query ListArticlesInProcessMedia($mediaUrl: String!) {\n ListArticles(\n filter: {\n mediaUrl: $mediaUrl\n articleTypes: [TEXT, IMAGE, AUDIO, VIDEO]\n transcript: { shouldCreate: true }\n }\n orderBy: [{ _score: DESC }]\n first: 9\n ) {\n edges {\n score\n mediaSimilarity\n node {\n id\n articleType\n attachmentUrl(variant: THUMBNAIL)\n }\n highlight {\n text\n hyperlinks {\n title\n summary\n }\n }\n }\n }\n }\n "): (typeof documents)["\n query ListArticlesInProcessMedia($mediaUrl: String!) {\n ListArticles(\n filter: {\n mediaUrl: $mediaUrl\n articleTypes: [TEXT, IMAGE, AUDIO, VIDEO]\n transcript: { shouldCreate: true }\n }\n orderBy: [{ _score: DESC }]\n first: 9\n ) {\n edges {\n score\n mediaSimilarity\n node {\n id\n articleType\n attachmentUrl(variant: THUMBNAIL)\n }\n highlight {\n text\n hyperlinks {\n title\n summary\n }\n }\n }\n }\n }\n "]; +export function graphql(source: "\n mutation CreateAIReply($articleId: String!) {\n CreateAIReply(articleId: $articleId) {\n text\n createdAt\n }\n }\n "): (typeof documents)["\n mutation CreateAIReply($articleId: String!) {\n CreateAIReply(articleId: $articleId) {\n text\n createdAt\n }\n }\n "]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "fragment CreateReferenceWordsReply on Reply {\n reference\n type\n}\n\nfragment CreateReplyMessagesReply on Reply {\n text\n ...CreateReferenceWordsReply\n}\n\nfragment CreateReplyMessagesArticle on Article {\n replyCount\n}\n\nfragment CreateHighlightContentsHighlight on Highlights {\n text\n hyperlinks {\n title\n summary\n }\n}"): (typeof documents)["fragment CreateReferenceWordsReply on Reply {\n reference\n type\n}\n\nfragment CreateReplyMessagesReply on Reply {\n text\n ...CreateReferenceWordsReply\n}\n\nfragment CreateReplyMessagesArticle on Article {\n replyCount\n}\n\nfragment CreateHighlightContentsHighlight on Highlights {\n text\n hyperlinks {\n title\n summary\n }\n}"]; +export function graphql(source: "\n query ListArticlesInInitState($text: String!) {\n ListArticles(\n filter: { moreLikeThis: { like: $text } }\n orderBy: [{ _score: DESC }]\n first: 4\n ) {\n edges {\n node {\n id\n text\n articleType\n attachmentUrl(variant: THUMBNAIL)\n }\n highlight {\n text\n hyperlinks {\n title\n summary\n }\n }\n }\n }\n }\n "): (typeof documents)["\n query ListArticlesInInitState($text: String!) {\n ListArticles(\n filter: { moreLikeThis: { like: $text } }\n orderBy: [{ _score: DESC }]\n first: 4\n ) {\n edges {\n node {\n id\n text\n articleType\n attachmentUrl(variant: THUMBNAIL)\n }\n highlight {\n text\n hyperlinks {\n title\n summary\n }\n }\n }\n }\n }\n "]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n mutation CreateAIReply($articleId: String!) {\n CreateAIReply(articleId: $articleId) {\n text\n }\n }\n "): (typeof documents)["\n mutation CreateAIReply($articleId: String!) {\n CreateAIReply(articleId: $articleId) {\n text\n }\n }\n "]; +export function graphql(source: "\n query ListArticlesInProcessMedia($mediaUrl: String!) {\n ListArticles(\n filter: {\n mediaUrl: $mediaUrl\n articleTypes: [TEXT, IMAGE, AUDIO, VIDEO]\n transcript: { shouldCreate: true }\n }\n orderBy: [{ _score: DESC }]\n first: 9\n ) {\n edges {\n score\n mediaSimilarity\n node {\n id\n articleType\n attachmentUrl(variant: THUMBNAIL)\n }\n highlight {\n text\n hyperlinks {\n title\n summary\n }\n }\n }\n }\n }\n "): (typeof documents)["\n query ListArticlesInProcessMedia($mediaUrl: String!) {\n ListArticles(\n filter: {\n mediaUrl: $mediaUrl\n articleTypes: [TEXT, IMAGE, AUDIO, VIDEO]\n transcript: { shouldCreate: true }\n }\n orderBy: [{ _score: DESC }]\n first: 9\n ) {\n edges {\n score\n mediaSimilarity\n node {\n id\n articleType\n attachmentUrl(variant: THUMBNAIL)\n }\n highlight {\n text\n hyperlinks {\n title\n summary\n }\n }\n }\n }\n }\n "]; export function graphql(source: string) { return (documents as any)[source] ?? {}; diff --git a/typegen/graphql.ts b/typegen/graphql.ts index 876caed0..447336fd 100644 --- a/typegen/graphql.ts +++ b/typegen/graphql.ts @@ -1399,7 +1399,7 @@ export type GetArticleInChoosingArticleQueryVariables = Exact<{ }>; -export type GetArticleInChoosingArticleQuery = { GetArticle: { text: string | null, replyCount: number, articleType: ArticleTypeEnum, articleReplies: Array<{ positiveFeedbackCount: number, negativeFeedbackCount: number, reply: { id: string, type: ReplyTypeEnum, text: string | null } | null }>, createdAt: string } | null }; +export type GetArticleInChoosingArticleQuery = { GetArticle: { text: string | null, replyCount: number, articleType: ArticleTypeEnum, createdAt: string, articleReplies: Array<{ positiveFeedbackCount: number, negativeFeedbackCount: number, reply: { id: string, type: ReplyTypeEnum, text: string | null } | null }> } | null }; export type SubmitReplyRequestWithoutReasonMutationVariables = Exact<{ id: Scalars['String']; @@ -1416,20 +1416,6 @@ export type GetReplyRelatedDataQueryVariables = Exact<{ export type GetReplyRelatedDataQuery = { GetReply: { type: ReplyTypeEnum, text: string | null, reference: string | null, createdAt: string } | null, GetArticle: { text: string | null, replyCount: number, createdAt: string } | null }; -export type ListArticlesInInitStateQueryVariables = Exact<{ - text: Scalars['String']; -}>; - - -export type ListArticlesInInitStateQuery = { ListArticles: { edges: Array<{ node: { text: string | null, id: string, articleType: ArticleTypeEnum }, highlight: { text: string | null, hyperlinks: Array<{ title: string | null, summary: string | null } | null> | null } | null }> } | null }; - -export type ListArticlesInProcessMediaQueryVariables = Exact<{ - mediaUrl: Scalars['String']; -}>; - - -export type ListArticlesInProcessMediaQuery = { ListArticles: { edges: Array<{ score: number | null, mediaSimilarity: number, node: { id: string, articleType: ArticleTypeEnum, attachmentUrl: string | null }, highlight: { text: string | null, hyperlinks: Array<{ title: string | null, summary: string | null } | null> | null } | null }> } | null }; - export type CreateReferenceWordsReplyFragment = { reference: string | null, type: ReplyTypeEnum, createdAt: string }; export type CreateReplyMessagesReplyFragment = { text: string | null, reference: string | null, type: ReplyTypeEnum, createdAt: string }; @@ -1445,15 +1431,29 @@ export type CreateAiReplyMutationVariables = Exact<{ export type CreateAiReplyMutation = { CreateAIReply: { text: string | null, createdAt: string } | null }; -export const CreateReferenceWordsReplyFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CreateReferenceWordsReply"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Reply"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reference"}},{"kind":"Field","name":{"kind":"Name","value":"type"}}]}}]} as unknown as DocumentNode; -export const CreateReplyMessagesReplyFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CreateReplyMessagesReply"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Reply"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"CreateReferenceWordsReply"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CreateReferenceWordsReply"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Reply"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reference"}},{"kind":"Field","name":{"kind":"Name","value":"type"}}]}}]} as unknown as DocumentNode; -export const CreateReplyMessagesArticleFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CreateReplyMessagesArticle"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Article"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"replyCount"}}]}}]} as unknown as DocumentNode; +export type ListArticlesInInitStateQueryVariables = Exact<{ + text: Scalars['String']; +}>; + + +export type ListArticlesInInitStateQuery = { ListArticles: { edges: Array<{ node: { id: string, text: string | null, articleType: ArticleTypeEnum, attachmentUrl: string | null }, highlight: { text: string | null, hyperlinks: Array<{ title: string | null, summary: string | null } | null> | null } | null }> } | null }; + +export type ListArticlesInProcessMediaQueryVariables = Exact<{ + mediaUrl: Scalars['String']; +}>; + + +export type ListArticlesInProcessMediaQuery = { ListArticles: { edges: Array<{ score: number | null, mediaSimilarity: number, node: { id: string, articleType: ArticleTypeEnum, attachmentUrl: string | null }, highlight: { text: string | null, hyperlinks: Array<{ title: string | null, summary: string | null } | null> | null } | null }> } | null }; + +export const CreateReferenceWordsReplyFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CreateReferenceWordsReply"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Reply"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reference"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]} as unknown as DocumentNode; +export const CreateReplyMessagesReplyFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CreateReplyMessagesReply"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Reply"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"CreateReferenceWordsReply"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CreateReferenceWordsReply"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Reply"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reference"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]} as unknown as DocumentNode; +export const CreateReplyMessagesArticleFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CreateReplyMessagesArticle"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Article"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"replyCount"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]} as unknown as DocumentNode; export const CreateHighlightContentsHighlightFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CreateHighlightContentsHighlight"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Highlights"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"hyperlinks"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"summary"}}]}}]}}]} as unknown as DocumentNode; export const SubmitTextArticleUnderConsentDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SubmitTextArticleUnderConsent"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"text"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"CreateArticle"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"text"},"value":{"kind":"Variable","name":{"kind":"Name","value":"text"}}},{"kind":"Argument","name":{"kind":"Name","value":"reference"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"type"},"value":{"kind":"EnumValue","value":"LINE"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const SubmitMediaArticleUnderConsentDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SubmitMediaArticleUnderConsent"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"mediaUrl"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"articleType"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ArticleTypeEnum"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"CreateMediaArticle"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"mediaUrl"},"value":{"kind":"Variable","name":{"kind":"Name","value":"mediaUrl"}}},{"kind":"Argument","name":{"kind":"Name","value":"articleType"},"value":{"kind":"Variable","name":{"kind":"Name","value":"articleType"}}},{"kind":"Argument","name":{"kind":"Name","value":"reference"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"type"},"value":{"kind":"EnumValue","value":"LINE"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; -export const GetArticleInChoosingArticleDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetArticleInChoosingArticle"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"GetArticle"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"replyCount"}},{"kind":"Field","name":{"kind":"Name","value":"articleType"}},{"kind":"Field","name":{"kind":"Name","value":"articleReplies"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"EnumValue","value":"NORMAL"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reply"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"text"}}]}},{"kind":"Field","name":{"kind":"Name","value":"positiveFeedbackCount"}},{"kind":"Field","name":{"kind":"Name","value":"negativeFeedbackCount"}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetArticleInChoosingArticleDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetArticleInChoosingArticle"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"GetArticle"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"replyCount"}},{"kind":"Field","name":{"kind":"Name","value":"articleType"}},{"kind":"Field","name":{"kind":"Name","value":"articleReplies"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"EnumValue","value":"NORMAL"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reply"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"text"}}]}},{"kind":"Field","name":{"kind":"Name","value":"positiveFeedbackCount"}},{"kind":"Field","name":{"kind":"Name","value":"negativeFeedbackCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]}}]} as unknown as DocumentNode; export const SubmitReplyRequestWithoutReasonDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SubmitReplyRequestWithoutReason"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"CreateOrUpdateReplyRequest"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"articleId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"replyRequestCount"}}]}}]}}]} as unknown as DocumentNode; -export const GetReplyRelatedDataDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetReplyRelatedData"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"articleId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"GetReply"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"reference"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"GetArticle"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"articleId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"replyCount"}}]}}]}}]} as unknown as DocumentNode; -export const ListArticlesInInitStateDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ListArticlesInInitState"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"text"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ListArticles"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"moreLikeThis"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"like"},"value":{"kind":"Variable","name":{"kind":"Name","value":"text"}}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"ListValue","values":[{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"_score"},"value":{"kind":"EnumValue","value":"DESC"}}]}]}},{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"4"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"articleType"}}]}},{"kind":"Field","name":{"kind":"Name","value":"highlight"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"hyperlinks"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"summary"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const ListArticlesInProcessMediaDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ListArticlesInProcessMedia"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"mediaUrl"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ListArticles"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"mediaUrl"},"value":{"kind":"Variable","name":{"kind":"Name","value":"mediaUrl"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"articleTypes"},"value":{"kind":"ListValue","values":[{"kind":"EnumValue","value":"TEXT"},{"kind":"EnumValue","value":"IMAGE"},{"kind":"EnumValue","value":"AUDIO"},{"kind":"EnumValue","value":"VIDEO"}]}},{"kind":"ObjectField","name":{"kind":"Name","value":"transcript"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"shouldCreate"},"value":{"kind":"BooleanValue","value":true}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"ListValue","values":[{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"_score"},"value":{"kind":"EnumValue","value":"DESC"}}]}]}},{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"9"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"score"}},{"kind":"Field","name":{"kind":"Name","value":"mediaSimilarity"}},{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"articleType"}},{"kind":"Field","name":{"kind":"Name","value":"attachmentUrl"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"variant"},"value":{"kind":"EnumValue","value":"THUMBNAIL"}}]}]}},{"kind":"Field","name":{"kind":"Name","value":"highlight"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"hyperlinks"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"summary"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const CreateAiReplyDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateAIReply"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"articleId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"CreateAIReply"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"articleId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"articleId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file +export const GetReplyRelatedDataDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetReplyRelatedData"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"articleId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"GetReply"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"reference"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"GetArticle"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"articleId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"replyCount"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]}}]} as unknown as DocumentNode; +export const CreateAiReplyDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateAIReply"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"articleId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"CreateAIReply"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"articleId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"articleId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]}}]} as unknown as DocumentNode; +export const ListArticlesInInitStateDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ListArticlesInInitState"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"text"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ListArticles"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"moreLikeThis"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"like"},"value":{"kind":"Variable","name":{"kind":"Name","value":"text"}}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"ListValue","values":[{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"_score"},"value":{"kind":"EnumValue","value":"DESC"}}]}]}},{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"4"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"articleType"}},{"kind":"Field","name":{"kind":"Name","value":"attachmentUrl"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"variant"},"value":{"kind":"EnumValue","value":"THUMBNAIL"}}]}]}},{"kind":"Field","name":{"kind":"Name","value":"highlight"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"hyperlinks"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"summary"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const ListArticlesInProcessMediaDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ListArticlesInProcessMedia"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"mediaUrl"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ListArticles"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"mediaUrl"},"value":{"kind":"Variable","name":{"kind":"Name","value":"mediaUrl"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"articleTypes"},"value":{"kind":"ListValue","values":[{"kind":"EnumValue","value":"TEXT"},{"kind":"EnumValue","value":"IMAGE"},{"kind":"EnumValue","value":"AUDIO"},{"kind":"EnumValue","value":"VIDEO"}]}},{"kind":"ObjectField","name":{"kind":"Name","value":"transcript"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"shouldCreate"},"value":{"kind":"BooleanValue","value":true}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"ListValue","values":[{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"_score"},"value":{"kind":"EnumValue","value":"DESC"}}]}]}},{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"9"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"score"}},{"kind":"Field","name":{"kind":"Name","value":"mediaSimilarity"}},{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"articleType"}},{"kind":"Field","name":{"kind":"Name","value":"attachmentUrl"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"variant"},"value":{"kind":"EnumValue","value":"THUMBNAIL"}}]}]}},{"kind":"Field","name":{"kind":"Name","value":"highlight"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"hyperlinks"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"summary"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file