xStore.contacts

Tin nhắn hỗ trợ của khách. Mỗi tin nhắn là MỘT lần gửi, không phải hội thoại.

Phương thức

Phương thức Cú pháp Mô tả Từ phiên bản
create xStore.contacts.create({ title, body, attachments? }): Promise<ContactListItem> Gửi tin nhắn hỗ trợ với tư cách khách đã đăng nhập. Từ 1.1 dùng title thay cho subject. 1.0
createAsGuest xStore.contacts.createAsGuest({ guest_name, guest_phone?, guest_email?, title, body, attachments? }): Promise<ContactListItem> Gửi tin nhắn mà không cần đăng nhập. Bắt buộc họ tên và ít nhất một trong hai: số điện thoại hoặc email. 1.1
list xStore.contacts.list({ cursor, limit }) hoặc xStore.contacts.list(cursor?, limit = 20): Promise<CursorPage<ContactListItem>> Danh sách tin nhắn đã gửi. 1.0
get xStore.contacts.get(contactId): Promise<ContactDetail> Chi tiết một tin nhắn kèm tệp đính kèm. Từ 1.1 không còn mảng messages. 1.0

Ví dụ đầy đủ

<script>
  // Khách vãng lai — không cần đăng nhập. Bắt buộc có họ tên, tiêu đề,
  // nội dung, và ÍT NHẤT MỘT trong hai: số điện thoại hoặc email.
  document.getElementById('contact-form').addEventListener('submit', async (e) => {
    e.preventDefault();
    const form   = e.currentTarget;
    const btn    = form.querySelector('button[type="submit"]');
    const status = form.querySelector('.status');

    btn.disabled       = true;
    status.textContent = 'Đang gửi…';

    try {
      const contact = await xStore.contacts.createAsGuest({
        guest_name:  form.guest_name.value,
        guest_phone: form.guest_phone.value,
        title:       form.title.value,
        body:        form.body.value,
      });
      form.reset();
      status.textContent = 'Đã gửi. Mã tin nhắn: ' + contact.id;
    } catch (err) {
      status.textContent = 'Gửi không thành công: ' + err.message;
    } finally {
      btn.disabled = false;
    }
  });

  // Khách đã đăng nhập — danh tính lấy từ phiên, không cần guest_*.
  async function sendAsCustomer(title, body) {
    const contact = await xStore.contacts.create({ title, body });
    return contact.id;
  }

  // Khách xem lại tin nhắn đã gửi. KHÔNG có trả lời: một liên hệ là một
  // tin nhắn. Tính năng hội thoại thuộc về module ticket trong tương lai.
  async function showContact(contactId) {
    const detail = await xStore.contacts.get(contactId);
    document.getElementById('contact-body').textContent = detail.body;
  }
</script>

Thư viện gọi tới /api/... trên chính tên miền cửa hàng, nên không cần khai báo địa chỉ máy chủ ở bất kỳ đâu.

Xem thêm Sự kiện để giao diện tự cập nhật sau mỗi thao tác.