feat(web): add message test module

This commit is contained in:
2026-07-07 15:42:14 +08:00
parent 2180fc4354
commit cc4e5bcc2f

View File

@@ -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>