feat(web): add message test module
This commit is contained in:
@@ -1,5 +1,155 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<h2>消息测试</h2>
|
<h2>消息测试</h2>
|
||||||
|
<el-tabs v-model="activeTab">
|
||||||
|
<el-tab-pane label="出站测试" name="outbound">
|
||||||
|
<el-form :model="outboundForm" label-width="120px">
|
||||||
|
<el-form-item label="目标类型">
|
||||||
|
<el-select v-model="outboundForm.targetType" placeholder="选择目标类型">
|
||||||
|
<el-option label="会话" value="conversation" />
|
||||||
|
<el-option label="个人" value="person" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
v-if="outboundForm.targetType === 'conversation'"
|
||||||
|
label="会话"
|
||||||
|
>
|
||||||
|
<el-select v-model="outboundForm.targetValue" placeholder="选择会话">
|
||||||
|
<el-option
|
||||||
|
v-for="c in conversations"
|
||||||
|
:key="c.id"
|
||||||
|
:label="c.conversationName || c.id"
|
||||||
|
:value="c.id"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-else label="目标ID">
|
||||||
|
<el-input v-model="outboundForm.targetValue" placeholder="person id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="文本内容">
|
||||||
|
<el-input v-model="outboundForm.text" type="textarea" :rows="4" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="handleOutbound">测试发送</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-tab-pane>
|
||||||
|
|
||||||
|
<el-tab-pane label="入站模拟" name="inbound">
|
||||||
|
<el-form :model="inboundForm" label-width="120px">
|
||||||
|
<el-form-item label="事件ID">
|
||||||
|
<el-input v-model="inboundForm.eventId" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="渠道类型">
|
||||||
|
<el-input v-model="inboundForm.channelType" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="事件类型">
|
||||||
|
<el-input v-model="inboundForm.eventType" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="消息来源">
|
||||||
|
<el-input v-model="inboundForm.messageSource" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="会话ID">
|
||||||
|
<el-input v-model="inboundForm.conversationId" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="文本内容">
|
||||||
|
<el-input v-model="inboundForm.text" type="textarea" :rows="4" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="handleInbound">模拟入站</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { onMounted, reactive, ref, watch } from 'vue'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
import { testSendMessage } from '@/api/send'
|
||||||
|
import { receiveMessage } from '@/api/inbound'
|
||||||
|
import { listConversations } from '@/api/channel'
|
||||||
|
|
||||||
|
const activeTab = ref('outbound')
|
||||||
|
const conversations = ref<any[]>([])
|
||||||
|
|
||||||
|
const outboundForm = reactive({
|
||||||
|
targetType: 'conversation',
|
||||||
|
targetValue: undefined as number | string | undefined,
|
||||||
|
text: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
const inboundForm = reactive({
|
||||||
|
eventId: '',
|
||||||
|
channelType: 'wecom',
|
||||||
|
eventType: 'message',
|
||||||
|
messageSource: 'realtime',
|
||||||
|
conversationId: '',
|
||||||
|
text: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => outboundForm.targetType,
|
||||||
|
() => {
|
||||||
|
outboundForm.targetValue = undefined
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
async function loadConversations() {
|
||||||
|
try {
|
||||||
|
const res: any = await listConversations()
|
||||||
|
conversations.value = res.data || []
|
||||||
|
} catch (e: any) {
|
||||||
|
ElMessage.error(e.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function handleOutbound() {
|
||||||
|
if (!outboundForm.targetValue) {
|
||||||
|
ElMessage.warning('请选择或输入目标')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
await testSendMessage({
|
||||||
|
targetType: outboundForm.targetType,
|
||||||
|
targetValue:
|
||||||
|
outboundForm.targetType === 'conversation'
|
||||||
|
? Number(outboundForm.targetValue)
|
||||||
|
: outboundForm.targetValue,
|
||||||
|
contentType: 'text',
|
||||||
|
content: { text: outboundForm.text },
|
||||||
|
channelStrategy: { channel_type: 'wecom', strategy: 'primary' },
|
||||||
|
})
|
||||||
|
ElMessage.success('发送成功')
|
||||||
|
} catch (e: any) {
|
||||||
|
ElMessage.error(e.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function handleInbound() {
|
||||||
|
if (!inboundForm.eventId || !inboundForm.conversationId) {
|
||||||
|
ElMessage.warning('请填写事件ID和会话ID')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
await receiveMessage({
|
||||||
|
eventId: inboundForm.eventId,
|
||||||
|
channelType: inboundForm.channelType,
|
||||||
|
eventType: inboundForm.eventType,
|
||||||
|
messageSource: inboundForm.messageSource,
|
||||||
|
conversationId: Number(inboundForm.conversationId),
|
||||||
|
content: { text: inboundForm.text },
|
||||||
|
rawPayload: {},
|
||||||
|
businessContext: {},
|
||||||
|
})
|
||||||
|
ElMessage.success('模拟入站成功')
|
||||||
|
} catch (e: any) {
|
||||||
|
ElMessage.error(e.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
loadConversations()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user