質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1432閲覧

Reactアプリからslackに通知を送りたい。

nil1000

総合スコア13

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/04/29 14:59

Reactからslackに通知を送るため以下のようなコードを書いたところ、
通知は機能せず、アプリの実行に重大なエラーが発生しているようです。
自分では何ら改善点を見つけられないので、どなたかご教授いただけると幸いです。

JSX

1import React, {useState, useCallback, useEffect} from 'react'; 2import Button from '@material-ui/core/Button'; 3import Dialog from '@material-ui/core/Dialog'; 4import DialogActions from '@material-ui/core/DialogActions'; 5import DialogContent from '@material-ui/core/DialogContent'; 6import DialogTitle from '@material-ui/core/DialogTitle'; 7import {TextInput} from "./index"; 8import {WEBHOOK_URL} from '../../webhookConfig'; 9 10const FormDialog = (props) => { 11 const [description, setDescription] = useState(""); 12 const [email, setEmail] = useState(""); 13 const [name, setName] = useState(""); 14 15 // Functions triggered by inputting text value 16 const inputDescription = useCallback((event) => { 17 setDescription(event.target.value) 18 },[setDescription]); 19 20 const inputEmail = useCallback((event) => { 21 setEmail(event.target.value) 22 },[setEmail]); 23 24 const inputName = useCallback((event) => { 25 setName(event.target.value) 26 },[setName]); 27 28 const validateEmailFormat = (email) => { 29 const regex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/ 30 return regex.test(email) 31 } 32 33 const validateRequiredInput = (...args) => { 34 let isBlank = false; 35 for (let i = 0; i < args.length; i=(i+1)|0) { 36 if (args[i] === "") { 37 isBlank = true; 38 } 39 } 40 return isBlank 41 }; 42 43 // Slackに問い合わせがあったことを通知する 44 const submitForm = () => { 45 const isBlank = validateRequiredInput(name, email, description) 46 const isValidEmail = validateEmailFormat(email) 47 48 if (isBlank) { 49 alert('必須入力欄が空白です。') 50 return false 51 } else if (!isValidEmail) { 52 alert('メールアドレスの書式が異なります。') 53 return false 54 } else { 55 const payload = { 56 text: 'お問い合わせがありました\n' 57 + 'お名前: ' + name + '\n' 58 + 'メールアドレス: ' + email + '\n' 59 + '【問い合わせ内容】\n' + description 60 }; 61 62 // fetchメソッドでフォームの内容をSlackのIncoming Webhook URL に送信する 63 fetch(WEBHOOK_URL, `https://hooks.slack.com/services/**************}`, { 64 65 method: 'POST', 66 body: JSON.stringify(payload) 67 }).then(() => { 68 alert('送信が完了しました。追ってご連絡いたします!'); 69 setDescription("") 70 setEmail("") 71 setName("") 72 return props.handleClose() 73 }) 74 } 75 }; 76 77 return ( 78 <Dialog open={props.open} onClose={props.handleClose}> 79 <DialogTitle>お問い合わせフォーム</DialogTitle> 80 <DialogContent> 81 <TextInput 82 label={"名前(必須)"} multiline={false} rows={1} 83 value={name} type={"text"} onChange={inputName} 84 /> 85 <TextInput 86 label={"メールアドレス(必須)"} multiline={false} rows={1} 87 value={email} type={"email"} onChange={inputEmail} 88 /> 89 <TextInput 90 label={"お問い合わせ内容(必須)"} multiline={true} rows={5} 91 value={description} type={"text"} onChange={inputDescription} 92 /> 93 </DialogContent> 94 <DialogActions> 95 <Button onClick={props.handleClose} color="primary"> 96 キャンセル 97 </Button> 98 <Button onClick={submitForm} color="primary"> 99 送信する 100 </Button> 101 </DialogActions> 102 </Dialog> 103 ); 104 105} 106 107export default FormDialog;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

fetch の引数に headers: {'Content-Type': 'application/json'} を与えてみてください。

投稿2021/04/30 00:56

A_kirisaki

総合スコア2853

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問